0

最近、プロジェクトで Nservice バスの実装を開始しました。私たちは Saga Service を初めて使用し、以下のシナリオに直面しています。

サガに 4 つのステップがあり、メッセージ 1 によってサガが開始されるとします。

メッセージ 2 は、いくつかの外部サービスによってトリガーされます。長時間実行できる message1 の処理が完了した後にのみ、 message2 を処理する必要があります。

どうすればこれを達成できますか? メッセージ2ハンドルでThread.Sleepを使用するか、メッセージ1の完了を確認した後、メッセージ2の到着を確認した後、メッセージ2の到着を確認した後、メッセージ1の処理の最後に呼び出される共通のメソッドを持つようなものを使用する以外に。

Service Matrix は使用していません。

前もって感謝します。

4

2 に答える 2

0

タイムアウト機能を使用して、次のようなことを行うことができます。

メッセージ 2 のハンドラーが呼び出されたときに、メッセージ 1 が完了したかどうかを確認します (サガ データのプロパティ)。

  • message1 が完了していない場合は、RequestTimeout を呼び出します

タイムアウト ハンドラが呼び出されたとき:

  • message1 が完了した場合、message2 の作業単位を実行するハンドラーにメッセージを送信します

  • message1 が完了していない場合、message1 の処理が完了するまで別のRequestTimeoutを実行します

スレッドスリープのようなことをしないことを強くお勧めします

意味のある用量?

于 2014-10-25T10:05:36.060 に答える