2

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);
4

2 に答える 2