1

NServiceBus を使用して、情報がデータベースに保存されるハンドラーでいくつかの作業を実行しています。そのプロセスの一環として、Web ソケットを介してメッセージを送信し、クライアントに情報を更新するよう伝えます。

問題は、DB 作業がトランザクションで実行されているため、Web ソケット メッセージを受信するクライアントが、トランザクションがコミットされる前にデータを読み取ろうとし、古いデータが返される可能性があることです。

ハンドラー全体がトランザクション スコープで実行されるため、トランザクションの最後にのみこの作業を実行することはできません。トランザクションのコミット後に作業を実行できるフックはありますか?

または、パブリッシャーがトランザクションに参加する「トランザクション パブリッシャー」を作成したいと思いますが、これはそれほど単純ではないようです。

この問題を解決する最善の方法は何だと思いますか? トランザクションを無効にすることはできません。

たとえば、メールを送信しようとすると、同様の問題が発生します。つまり、トランザクションがコミットされたときにのみメールを送信したいのです。

4

1 に答える 1

4

現在のトランザクションの一部として、(自分自身/別のエンドポイント) にメッセージを送信して、たとえば、メールを送信するか、Web ソケットに接続するように伝えます。

メッセージは、トランザクションがコミットされた場合にのみ実際に送信されます。その後、そのメッセージのハンドラーで、元のトランザクションがコミットされた後に発生するはずの作業を行うことができます。

于 2013-07-12T07:27:13.147 に答える