web-dev-qa-db-ja.com

JMSのMessageListenerとConsumerの違いは何ですか?

JMSは初めてです。私が理解している限り、Consumersはキュー/トピックからメッセージを選択することができます。では、なぜMessageListenerが必要なのですか?Consumers彼らがいつメッセージを受け取ったかを知るだろうか?そのようなMessageListenerの実際の使用法は何ですか?

編集: MessageListenerのJavadoc から:

MessageListenerオブジェクトは、非同期で配信されるメッセージを受信するために使用されます。

各セッションは、メッセージをリスナーにシリアルに渡すことを保証する必要があります。これは、同じセッションの1つ以上のコンシューマーに割り当てられたリスナーが、セッションが最後の呼び出しを完了するまで、onMessageメソッドが次のメッセージで呼び出されないと想定できることを意味します。

だから私は用語asynchronouslyseriallyを一緒に使用することの間で混乱しています。これらの2つの用語は、MessageListenerの機能を説明する上でどのように関連していますか?

14
Geek

違いは、MessageConsumerを使用してメッセージを同期的に受信することです。

MessageConsumer mc = s.createConsumer(queue);
Message msg = mc.receive();

非同期配信の場合、MessageListenerオブジェクトをメッセージコンシューマーに登録できます。

mc.setMessageListener(new MessageListener() {
    public void onMessage(Message msg) {
        ...
    }
});
20

docs から:

synchronous受信の場合、クライアントは、受信メソッドの1つを使用して、メッセージコンシューマーに次のメッセージを要求できます。

非同期配信の場合、クライアントはMessageListenerオブジェクトをメッセージに登録できます消費者。

10
wrm

他の回答に記載されていない私の知識による大きな違いの1つは、MessageConsumerがMessageSelectorsを利用できるため、関心のあるメッセージを消費する機能があるのに対し、MessageListenerはすべてのメッセージをリッスンすることです。 。

J2EEチュートリアルドキュメントから http://docs.Oracle.com/javaee/5/tutorial/doc/bnceh.html

JMSメッセージセレクター
メッセージングアプリケーションが受信したメッセージをフィルタリングする必要がある場合は、JMS APIメッセージセレクターを使用できます。これにより、メッセージコンシューマーは、関心のあるメッセージを指定できます。メッセージセレクターは、メッセージのフィルタリング作業をに割り当てます。アプリケーションではなくJMSプロバイダー。

3
mtk