参考ブログ投稿: http://www.cnblogs.com/SzeCheng/p/4792084.html
参考ブログ投稿: http://activemq.apache.org/Producer-flow-control.html
用語の説明:
P: プロデューサー
C: コンシューマー
サーバー: P または ActiveMQ サービス
クライアント: ActiveMQ サービスまたは C
クライアントがメッセージを正常に受信したという兆候は、メッセージが署名されていることです。メッセージを正常に受信するには、通常、次の 3 つの段階が含まれます。
1.クライアントはメッセージを受け取ります
2.クライアントはメッセージを処理します
3.メッセージは署名されています。
session = connection.createSession(Boolean.false, Session.CLIENT_ACKNOWLEDGE);##第一个参数控制事务,第二个参数控制消息
トランザクションのないセッションでは、メッセージがいつどのように署名されるかは、セッションの設定によって異なります。
1. Session.AUTO_ACKNOWLEDGE
クライアントが受信または onMessage から正常に戻ると、Session はクライアントによるこのメッセージの受信に自動的に署名します。
2. Session.CLIENT_ACKNOWLEDGE
クライアントは、メッセージのacknowledgeメソッドを呼び出してメッセージに署名します。
message.acknowledge();
トランザクションを伴うセッションでは、トランザクションが送信されると署名が自動的に発生します。トランザクションがロールバックされると、受信したすべてのメッセージが再度配信されます。実際、ここでの Session.CLIENT_ACKNOWLEDGE はほとんど役に立ちません。
session = connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE);
session.commit();
概要:
1. プロデューサーの場合: サーバーは P、クライアントは ActiveMQ サービスです。 セッションは AUTO_ACKNOWLEDGE と CLIENT_ACKNOWLEDGE に設定されますが、状況によりますが、その差はそれほど大きくありません。
2. コンシューマの場合: サーバーは ActiveMQ で、クライアントは C です。セッションは AUTO_ACKNOWLEDGE に設定され、メッセージが受信されると (受信または onMessage が正常に返される)、消費は成功し、データはキューから削除されます。データが目的の結果に正しく処理されるかどうかは気にしません。セッションが CLIENT_ACKNOWLEDGE に設定されている場合、正常に消費するには確認メソッドを手動で呼び出す必要があり、その後データはキューから削除されます。
3. P と C のセッションが相互に影響を与えないように設定されているモード。