Spring アプリを持っています。JMS メッセージ グループを使用して、特定のブロック (および同じトランザクションなど) で JMS メッセージを処理したいと考えています。基本的に、5 つの関連するイベントがあるとします。同じ連続しJMSTemplate
た値でそれらを送信する があります。JMSXGroupID
JMSXGroupSeq
次にMessageProcessorService
、Spring で次のように定義します。
<bean id="messageProcessorService" class="x.y.z.MessageProcessorService"/>
<jms:listener-container connection-factory="pooledJmsConnectionFactory" concurrency="5" >
<jms:listener destination="messages.queue" ref="messageProcessorService" />
</jms:listener-container>
私MessageProcessorService
は標準でシンプルです:
@Service
public class MessageProcessorService implements MessageListener {
public void onMessage(Message msg) { ... }
}
問題は、onMessage が一度に 1 つのメッセージしか取得しないためです。特定のグループの 5 つのメッセージをすべて取得して処理を開始するにはどうすればよいですか?
グループの終わりを示すために負の値を使用できることを知っているのでJMSXGroupSeq
、メッセージの小さなリストを保持してメッセージを調べ、JMSXGroupSeq
それが -1 のときにグループ全体を処理できると考えていましたが、それは少し思われますハッキーで、スレッドセーフかどうかはわかりません(複数のスレッドを並行して処理する必要があることは間違いありません)。
Spring/JMS/ActiveMQ で以前にこのようなことをした人はいますか?