0

jms:message-driven-channel-gateway で構成された SI を使用しています。私の使用例は、キューからメッセージを受信し、それを JDBC 経由でデータベースに保存し、キューからメッセージをコミットしてから、このメッセージがそのタイプに応じてさまざまなチャネルを通過し続けるようにすることです。その後メッセージがエラーになった場合、元のメッセージがデータベースに保存されているため、再生できるので問題ありません。

私の問題は、データベースが持続した直後にキューからトランザクションをコミットしようとすることです。これは事実上フローの途中であり、春のトランザクション管理を最後に試してコミットすることしかできませんでした。これは適切ではありません。データベースが永続化された後にエラーがスローされた場合でも、JMS キューにメッセージが残るためです。これは、外部トランザクションが発生した場所であるためです。

では、メッセージを JMS キューからプルし、データベースに保存してから、キューからコミットする簡単な方法はありますか?

ありがとう!

4

1 に答える 1

0

DB コミット後に非同期にする必要があります。DB 更新後に ExecutorChannel または QueueChannel を使用します。ダウンストリーム フローは別のスレッドで実行され、トランザクションはハンドオフ後にコミットされます。

于 2012-06-01T21:02:25.743 に答える