15

私は初めてJMSです。私が理解している限りConsumers、キュー/トピックからメッセージを選択できます。では、メッセージがいつ受信されたかがわかるMessageListenerため、なぜ が必要なのですか? Consumersそのようなの実用的な用途は何MessageListenerですか?

編集: MessageListener の Javadocから:

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

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

そのため、用語の非同期的使用と逐次的使用を混同しています。の機能を説明する際に、これら 2 つの用語はどのように関連していますMessageListenerか?

4

3 に答える 3

21

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

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

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

mc.setMessageListener(new MessageListener() {
    public void onMessage(Message msg) {
        ...
    }
});
于 2013-06-27T06:40:11.367 に答える
10

ドキュメントから:

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

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

于 2013-06-27T06:40:02.403 に答える
3

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

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

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

于 2014-12-11T08:43:59.043 に答える