2012-03-02 9 views
1

私はActiveMQを使用してJavaアプリケーションを作成しています。私はプロデューサクラス(ユーザ入力を受け取ります)とコンシューマクラスをリスナで持っているので、メッセージが到着すると同時にメッセージリスナはonMessage(msg)関数を実行します。 私の質問は、消費者がブローカに確認応答を返すときです。つまり、msgはブローカからキューから取り出されますか? onMessage(msg)関数で書かれたアクションを完了した後か、それともonMessage(msg)関数が呼び出された直後ですか?ActiveMQのコンシューマーからの承認

答えて

1

通常、onMessageが例外をスローするケースを処理する必要があるため、onMessageの完了後にackが送信されます。

+0

いいえ。私はonMessage()関数で待つように頼んだ後に確認しましたが、確認は送信されませんでした。ありがとう:-) – Vanp

3

どのように構成されているのか、またどのようにあなたがuse transactionsに依存するかによって異なります。

メッセージ駆動型Beanを使用していますか?その場合、私はトランザクションが正常にコミットされたときに承認が送られると思います。 specification(具体「ejbcore」バージョン)を参照して、言うJMSメッセージ駆動型Bean用セクション5.4.14メッセージの確認応答:

メッセージの確認が自動的にコンテナによって処理されます。メッセージ駆動型Beanがコンテナ管理のトランザクション境界を使用する場合、メッセージ確認応答はトランザクションコミットの一部として自動的に処理されます。

それが言うように行く:Bean管理トランザクション境界を使用する場合は、メッセージの受信がBean管理トランザクションの一部にすることはできません

を、そして、この場合には、領収書が確認されます容器によって。 Bean管理のトランザクション境界設定が使用されている場合、BeanプロバイダはセマンティクスまたはDUPS_OK_ACKNOWLEDGEセマンティクスのいずれかを注釈のactivationConfig要素を使用するか、またはactivation-config-propertyデプロイメント記述子要素を使用して適用する必要があるかどうかを示すことができます。

しかし、実際には、Bean管理のトランザクションを使用するべきではないので、無関係です。

関連する問題