2

およびトランザクションについて多くの質問があることは承知してmessage driven beansいますが、一般的なシナリオであるに違いない (私が考えるもの) に対する答えを見つけることができませんでした。

メールを送信するために呼び出すことができるサービスがあります。呼び出されると、テーブルに電子メール レコードが作成されActiveMQ、処理のために ID がプッシュされます。ここまでは問題ありませんが、キューは ID を取得し、トランザクションがコミットされる前に電子メールの送信を試み、電子メールはデータベースにありません。

サービス自体はトランザクションですが、より大きなトランザクションの一部である場合もあります。

このシナリオを処理する最善の方法は何ですか? 現在、動作する Thread.sleep を使用してConsumerいます。しかし、これは汚い気がします...

(私はSpringを使用していません)

4

2 に答える 2

1

通常の処理に加えて、メールをテーブルに挿入するトランザクションを作成できます。トランザクションでメールを送信しないでください。

その後 (トランザクションが成功すると)、キュー サービスに転送することで、プロセスが電子メール テーブルをクリアします。

于 2016-02-23T12:52:27.510 に答える