簡體   English   中英

MessageListener和JMS中的Consumer之間有什么區別?

[英]What is the difference between a MessageListener and a Consumer in JMS?

我是JMS新手。 據我所知, Consumers能夠從隊列/主題中選擇消息。 那么為什么你需要一個MessageListener因為Consumers會知道他們什么時候收到消息? 這樣一個MessageListener的實際用途是什么?

編輯:從MessageListenerJavadoc

MessageListener對象用於接收異步傳遞的消息。

每個會話必須確保它將消息串行傳遞給偵聽器。 這意味着分配給同一會話的一個或多個使用者的偵聽器可以假定在會話完成最后一次調用之前不會使用下一條消息調用onMessage方法。

所以我在異步串行一起使用術語時感到困惑。 這兩個術語在描述MessageListener的功能時如何相關?

區別在於MessageConsumer用於同步接收消息:

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

對於異步傳遞,我們可以使用消息使用者注冊MessageListener對象:

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

來自文檔

對於同步接收,客戶端可以使用其接收方法之一從消息使用者請求下一條消息。

對於異步傳遞,客戶端可以向消息使用者注冊MessageListener對象。

根據我的知識,其他答案中沒有說明的一個主要區別是MessageConsumer可以使用MessageSelectors ,因此能夠使用它感興趣的消息,而MessageListener將監聽所有消息。

來自J2EE教程文檔http://docs.oracle.com/javaee/5/tutorial/doc/bnceh.html

JMS消息選擇器
如果您的消息傳遞應用程序需要過濾它收到的消息,您可以使用JMS API消息選擇器,它允許消息使用者指定它感興趣的消息。消息選擇器將過濾消息的工作分配給JMS提供者而不是應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM