JMS
は初めてです。私が理解している限り、Consumers
はキュー/トピックからメッセージを選択することができます。では、なぜMessageListener
が必要なのですか?Consumers
彼らがいつメッセージを受け取ったかを知るだろうか?そのようなMessageListener
の実際の使用法は何ですか?
編集: MessageListenerのJavadoc から:
MessageListenerオブジェクトは、非同期で配信されるメッセージを受信するために使用されます。
各セッションは、メッセージをリスナーにシリアルに渡すことを保証する必要があります。これは、同じセッションの1つ以上のコンシューマーに割り当てられたリスナーが、セッションが最後の呼び出しを完了するまで、onMessageメソッドが次のメッセージで呼び出されないと想定できることを意味します。
だから私は用語asynchronouslyとseriallyを一緒に使用することの間で混乱しています。これらの2つの用語は、MessageListener
の機能を説明する上でどのように関連していますか?
違いは、MessageConsumerを使用してメッセージを同期的に受信することです。
MessageConsumer mc = s.createConsumer(queue);
Message msg = mc.receive();
非同期配信の場合、MessageListenerオブジェクトをメッセージコンシューマーに登録できます。
mc.setMessageListener(new MessageListener() {
public void onMessage(Message msg) {
...
}
});
docs から:
synchronous受信の場合、クライアントは、受信メソッドの1つを使用して、メッセージコンシューマーに次のメッセージを要求できます。
非同期配信の場合、クライアントはMessageListenerオブジェクトをメッセージに登録できます消費者。
他の回答に記載されていない私の知識による大きな違いの1つは、MessageConsumerがMessageSelectors
を利用できるため、関心のあるメッセージを消費する機能があるのに対し、MessageListener
はすべてのメッセージをリッスンすることです。 。
J2EEチュートリアルドキュメントから http://docs.Oracle.com/javaee/5/tutorial/doc/bnceh.html
JMSメッセージセレクター
メッセージングアプリケーションが受信したメッセージをフィルタリングする必要がある場合は、JMS APIメッセージセレクターを使用できます。これにより、メッセージコンシューマーは、関心のあるメッセージを指定できます。メッセージセレクターは、メッセージのフィルタリング作業をに割り当てます。アプリケーションではなくJMSプロバイダー。