0

一部の Spring Bean にトランザクション メソッドがあり、次の 2 つのことを行うとします。

  • JMS メッセージを非同期に送信する
  • データベースを更新

問題は、メッセージが消費されたときに、DB トランザクションがコミットされていないことがあり、ハンドラーが DB の期待値を見つけられなかったことです。

明らかな解決策は、トランザクションで送信することですが、ActiveMQ で利用可能な非同期送信を使用してスループットを向上させます。送信をトランザクション対応にすると、非同期性が失われ、OuOfMemory を取得するリスクも生じます。

この問題をどのように解決しますか?

4

1 に答える 1

2

XA 対応のトランザクション マネージャーを使用し、JMS メッセージを送信して、同じ分散トランザクションで DB を更新する必要があります。

これにより、非同期性が変わることはありません。送信呼び出しは、受信者がメッセージを受信する前に返されます。しかし、それを受信すると、トランザクションはコミットされ、受信者はデータベースで更新を見つけます。

OutOfMemoryErrors がこれと何の関係があるのか​​わかりません。

于 2012-09-14T09:46:38.190 に答える