NServiceBus 4.3 を使用して、特定の状況が発生したときにエラー キューにメッセージを送信したいと考えています。
シナリオは、メッセージを受け取ったときに、このメッセージがデータベース内の 1 つ以上のアイテムを参照しているかどうかを確認することです。複数の参照がある場合は、 a をスローしAmbiguousItemException
てキャッチします。正しい情報を提供してくれる担当者にメールする必要があります。すべてが解決されましたが、このメッセージを再試行したくありません。代わりに、それをエラー キューに移動したいので、必要な情報を取得したら、null 許容プロパティを追加して、メッセージを処理のためにキューに戻します。_bus.ForwardCurrentMessageTo("error")
、_bus.Send("error", message)
、 を使ってみました_bus.SendLocal(message)
。最後のものは、基本的にメッセージを無限ループに入れます。コードはこんな感じです。
public class MoveToErrorQueue
{
private readonly IBus _bus;
public MoveToErrorQueue(IBus bus)
{
_bus = bus;
}
public virtual void Send(ResubmitMessage message)
{
message.Foo= -1;
_bus.Send("error", message);
}
}
そしてそれを呼び出すコード
try
{
//removed for brevity
}
catch (AmbiguousItemException ex)
{
Log.Error(ex);
sendNotificationCommand.FailureMessage = ex.Message;
_moveToErrorQueue.Send(commandMesage);
}
SendNotification(sendScanningNotificationCommand);