3

私はスタンドアロンのMQJMSアプリケーションを扱っています。このアプリは、クライアントがキューに入れられたメッセージプロデューサーをすでに消費していることを「認識する」必要があります。クライアントアプリは私たちの責任ではないからです。したがって、「msg.acknowledge();」のようなものを彼らに書かせることはできません。彼らの側にあるもの(msg.acknowledge()は私の状態では正しいアプローチではありません)。stackoverflowで履歴の回答を検索します。以下を見つけることは私が望むものとまったく同じです:

https://stackoverflow.com/questions/6521117/how-to-guarantee-delivery-of-the-message-in-jms

JMS仕様またはさまざまな実装は、メッセージの配信確認をサポートしていますか?

私の質問は、これをMQAPIまたはJMSAPIにアーカイブする他の方法はありますか?msgプロデュース側でのみコーディングを行う必要があります。キューまたはトピックにすることができます。

もう1つの質問は、JMSの確認モードCLIENT_ACKNOWLEDGEですが、これは無関係ですか?このモードでは、クライアントがメッセージを消費してmsg.acknowledge()を呼び出すまで、send()メソッドを呼び出すとアプリケーションがブロックされる可能性があると常に信じていますが、そうではないようです。プロデュースはメッセージが配信された後にアプリを終了し、クライアントがacknowledge()を呼び出すまでメッセージはキューに保存されます。メッセージがクライアントによって確認されるまで、プロデューサーアプリをそこにハングアップさせることは可能ですか?

私のコンセプトが正しくない場合は、私を訂正してください、ありがとう。

4

1 に答える 1

8

メッセージキューの主な目的は、プロデューサーとコンシューマーを分離することです。プロデューサーは、メッセージがコンシューマーによって消費されるのを待つ必要はなく、その仕事を続けることができます。理想的には、プロデューサーがメッセージがコンシューマーによって処理されたかどうかを知る必要がある場合、コンシューマーが別のキューで応答メッセージを送信するのを待つ必要があります。

メッセージの確認は、プロデューサーとは何の関係もありません。メッセージ確認応答は、メッセージがアプリケーションに配信された後、コンシューマーがメッセージングプロバイダーにメッセージをキューから削除するように指示する方法です。

JMSプロバイダー(MQ JMSなど)がアプリケーションにメッセージを配信した後、メッセージングプロバイダーにメッセージをキューから削除するように指示する場所に自動確認応答があります。次に、メッセージを受信した後、アプリケーションがメッセージングプロバイダーにメッセージをキューから削除するように明示的に指示するクライアント確認応答があります。

プロデューサーがコンシューマーがメッセージを受信するのを待たなければならない理由はありますか?1つの方法は、エレガントではありませんが、次のようになります。メッセージが送信されたら、送信されたメッセージのメッセージIDを使用して、そのメッセージを参照してみます。メッセージが見つからない場合は、メッセージが消費されたと見なすことができます

于 2012-01-06T04:28:24.337 に答える