3

メッセージをキューでリッスンするアプリケーションがあり、dmlcがsessionTransactedプロパティを提供していることを知っています。これにより、メッセージ受信イベントを手動でコミットできると思いますが、リスナーでそれを活用する方法がわかりません。

RuntimeExceptionをスローするだけで、メッセージはキューに戻され、ErrorHandlerが設定されていない場合はループに入るようですが、受信を具体的にコミットしたいと思います。

例えば

public class JMSMessageListener implements MessageListener {

    @Override
    public void onMessage(Message message) {
       // do something with the message and then manually commit
    }
}
4

1 に答える 1

2

ActiveMQの経験があります。を有効にするsessionTransactedと、でアプリケーションが予期せずシャットダウンした場合、onMessage再起動後にメッセージが再度処理されます。セッションが処理されない場合、セッションは失われます。

を使用してトランザクションを手動で制御することはできません(メッセージをロールバックするために例外をスローすることを除く)sessionTransacted私は試したことがありませんが、 SessionAwareMessageListenerを確認することをお勧めします。

于 2011-04-07T20:57:01.590 に答える