web-dev-qa-db-ja.com

JMS AUTO_ACKNOWLEDGEはいつ承認されますか?

私はこれをグーグルしようとしましたが、成功していません。 AUTO_ACKNOWLEDGEを使用していて、Javaで書かれたコンシューマクライアントがある場合、メッセージはいつ承認されますか? MessageListenerメソッドを含むonMessageを使用しています。 onMessageが完了する前、またはonMessageが完了した後、または他の時点で、確認応答がサーバーに送信されますか?だれでも提供できるヘルプを事前にありがとう!

25
Reid Mac

これをチェックしてください one

_AUTO_ACKNOWLEDGE_モードでは、肯定応答は常に、onMessage()ハンドラーが戻った後に暗黙的に発生する最後のことです。メッセージを受信するクライアントは、消費するセッションで_CLIENT_ACKNOWLEDGE_モードを指定することにより、保証されたメッセージの配信をより細かく制御できます。

_CLIENT_ACKNOWLEDGE_を使用すると、確認応答が送信されるタイミングをアプリケーションで制御できます。たとえば、アプリケーションはメッセージを確認し、それによってJMSプロバイダーの義務を軽減し、メッセージで表されるデータをさらに処理することができます。その鍵となるのは、リスト1に示すように、Messageオブジェクトのacknowledge()メソッドです。

acknowledge()メソッドは、メッセージがコンシューマーによって正常に受信されたことをJMSプロバイダーに通知します。このメソッドは、確認プロセス中にプロバイダーの障害が発生した場合、クライアントに例外をスローします。プロバイダーの障害により、メッセージはJMSサーバーによって再配信のために保持されます。

30
Andrey Borisov

CLIENT_ACKNOWLEDGE
この確認モードでは、クライアントはメッセージの確認メソッドを呼び出して、消費されたメッセージを確認します。

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
...
msg = (TextMessage) consumer.receive();
//acknowledge
msg.acknowledge();

AUTO_ACKNOWLEDGE
この確認応答モードでは、セッションは、call to receiveからセッションが正常に戻ったとき、またはセッションがメッセージを処理するために呼び出したメッセージリスナーが正常に戻ったときに、クライアントによるメッセージの受信を自動的に確認します。

Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

ソース
最良の例

9
Premraj