2017-02-03 4 views
1

メッセージングにrebusとSqsを使用します。また、3回の再試行後にメッセージをDeadLetterキューに移動するRedriveポリシーを各キューに構成しました。Rebusメッセージが複数のハンドラによってキャッチされたときに、成功したハンドラと例外が発生したことを知る方法

public class MessageHandlerA : IHandleMessages<MessageX> 
{ 
    public async Task Handle(MessageX message) 
    { 
     Console.WriteLine("HandlerA is about of failing"); 
     throw new FileLoadException(); 
    } 
} 

public class MessageHandlerB : IHandleMessages<MessageX> 
{ 
    public async Task Handle(MessageX message) 
    { 
     Console.WriteLine("HandlerB finished Ok"); 
    } 
} 

ここでの動作は最初のハンドラが失敗した後、そのREBUSが処理パイプラインを中止している: は、私たちは、同じメッセージタイプを扱う多くのハンドラを持っています。 デッドレターキューを使用しています。ハンドラが例外を発生させると、メッセージはデッドレターキューに移動します(予想される動作)。ここでのことは、メッセージを処理したハンドラと、DeadLetterキューからメッセージが再処理された後に同じハンドラがメッセージを2回処理するのを避けるためのハンドラを追跡することです。

答えて

1

ハンドラが個別に成功/失敗する可能性があり、ハンドラが(ハンドラによってSqlTransactionのように)例外でロールバックできるトランザクションに何らかの形で参加していない場合は、メッセージハンドラのパイプラインdo 1つのメッセージに対して "複数のことを行う"。

MessageXは、自分自身に2つのメッセージを送信するハンドラで受信する必要があります。この方法では、実行する必要があることごとに個別のメッセージを使用します。

関連する問題