JMS仕様では、メッセージがサブスクライバーによって消費されたかどうかをパブリッシャーが知るためのAPIは定義されていません。パブリッシャーはメッセージを発行するだけで、そのメッセージをサブスクライバーに配信するのはメッセージングプロバイダー/ブローカーです。サブスクリプションがある場合、ブローカーはメッセージを配信します。それ以外の場合、そのメッセージは破棄されます。
このsession.CLIENT_ACKNOWLEDGE
オプションは、コンシューマーがメッセージングプロバイダー(プロデューサーではない)にメッセージをキュー/メモリから削除するように指示する方法の1つです。他にもいくつかの確認応答オプションがありますが、これらのオプションはすべて、メッセージングプロバイダーにメッセージを削除するように指示するためのものですが、プロデューサーには通知しません。
プロデューサーがコンシューマーからの確認応答を必要とする場合、コンシューマーは別のトピックに関する確認応答メッセージを公開する必要があり、プロデューサーはそれらの確認応答を受信するためにそのトピックにサブスクライブします。例えば:
プロデューサーはプロデューサーに公開しますTOPIC1
プロデューサーはサブスクライブしますTOPIC1/ACKS
コンシューマーはサブスクライブしTOPIC1
ますメッセージを受信した後
コンシューマーは確認メッセージを公開しますTOPIC1/ACKS
プロデューサーは確認メッセージを受信します。
その後、TOPIC2で公開できます
TOPIC1には複数のサブスクライバーが存在する可能性があるため、複数の確認応答メッセージが存在する可能性があることに注意する必要があります。