NServiceBus を使用して、情報がデータベースに保存されるハンドラーでいくつかの作業を実行しています。そのプロセスの一環として、Web ソケットを介してメッセージを送信し、クライアントに情報を更新するよう伝えます。
問題は、DB 作業がトランザクションで実行されているため、Web ソケット メッセージを受信するクライアントが、トランザクションがコミットされる前にデータを読み取ろうとし、古いデータが返される可能性があることです。
ハンドラー全体がトランザクション スコープで実行されるため、トランザクションの最後にのみこの作業を実行することはできません。トランザクションのコミット後に作業を実行できるフックはありますか?
または、パブリッシャーがトランザクションに参加する「トランザクション パブリッシャー」を作成したいと思いますが、これはそれほど単純ではないようです。
この問題を解決する最善の方法は何だと思いますか? トランザクションを無効にすることはできません。
たとえば、メールを送信しようとすると、同様の問題が発生します。つまり、トランザクションがコミットされたときにのみメールを送信したいのです。