通知は、信頼性の高いメッセージの配信を確実に行うために、クライアントとメッセージサービスの間で送信されるメッセージです。通知は、プロデューサとコンシューマとでは使用方法が異なります。
メッセージがプロデュースされる場合、ブローカは、メッセージを受信し、送信先に保管し、持続的に保存したことを通知します。プロデューサの send() メソッドは、通知を受信するまでブロックします。持続メッセージが送信されるとき、これらの通知はクライアントからは見えません。
メッセージがコンシュームされる場合、クライアントは、ブローカが送信先からメッセージを削除する前に、送信先から配信されたメッセージを受信し、コンシュームしたことを通知します。JMS では、違うレベルの信頼性を表す別の通知モードを規定しています。
AUTO_ACKNOWLEDGE モードでは、クライアントによってコンシュームされる各メッセージについてセッションが自動的に通知します。セッションスレッドはブロックし、コンシュームされたメッセージそれぞれのクライアント通知をセッションが処理したことをブローカが確認するまで待ちます。
CLIENT_ACKNOWLEDGE モードでは、クライアントは、1 つ以上のメッセージがコンシュームされたあとに、メッセージオブジェクトの acknowledge() メソッドを呼び出すことによって明示的に通知します。このため、セッションは、このメソッドを最後に呼び出してからセッションによってコンシュームされたすべてのメッセージに対して通知します。セッションスレッドはブロックし、クライアント通知をセッションが処理したことをブローカが確認するまで待ちます。
Message Queue では、クライアントが 1 つのメッセージの受信しか通知できないようにするメソッドを用意することにより、このモードを拡張しています。
DUPS_OK_ACKNOWLEDGE モードでは、10 個のメッセージがコンシュームされてからセッションが通知します。このモードではブローカ通知が不要なため、セッションスレッドはブロックしてブローカ通知を待つことはありません。このモードは、メッセージが消失されないように保証しますが、重複したメッセージが受信されないことを保証するものではありません。このため、DUPS_OK という名前が付けられています。
信頼性よりもパフォーマンスを重視するクライアントの場合、Message Queue サービスでは、NO_ACKNOWLEDGE モードを用意することにより、JMS API を拡張しています。このモードでは、ブローカはクライアント通知を追跡しないので、メッセージがコンシューミングクライアントによって正常に処理されたかどうか保証されません。このモードを選択した場合、非永続サブスクライバへ送信される非持続メッセージのパフォーマンスが向上します。