0

NServiceBus で SAGA を作成しています。このサガは、変換して検証し、最後にインポートする必要がある文字列を処理しています。これら 3 つのアクションは別個のサービスです。NServiceBus の個別のハンドラーとしてアクションが必要です。NServiceBus でリクエスト/リプライ機能を使用しています。このような:

 Bus.Send<TransformRequest>("Backend", m =>
    {
       m.string = string;
       m.MessageId = messageId;
    })
    .Register(i =>
    {
       Console.WriteLine("transform finished")
    });

変換ハンドラは次のとおりです。

 public void Handle(TransformRequest message)
    {
        var transformationResult = _transformationService.Transform(message.string);

        var response = new TransformResponse()
        {
            string= transformationResult,
            messageId = message.messageId,
        };

        Bus.Reply(response); 
    }

私の質問は次のとおりです。リクエストが transformHandler に送信されたとき。メッセージキューにメッセージが送信されます。次に、サーバーがクラッシュします。サーバーが再起動し、サーバーが TransformationRequest を取得し、機能しており、Saga に応答したいのですが、どうすればよいでしょうか? サガはもう生きておらず、.Register を処理できません。この問題を処理するにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

2

NServiceBus は、応答メッセージのヘッダーを使用して自動的に saga インスタンスを見つけます。

Sean が言及しているように、.Register をスキップして、変換結果のハンドラーをサガに追加する必要があります。その理由は、.Register を使用するコールバックがメモリに格納されているため、再起動後は存続しないためです。

于 2014-09-02T13:23:54.497 に答える