メッセージングに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回処理するのを避けるためのハンドラを追跡することです。