簡體   English   中英

Spring JMS的異步消耗-ActiveMQ

[英]Asynchronous consumption with Spring JMS - ActiveMQ

ActiveMQ有兩種消費方式:

  1. 通過調用MessageListener異步消費
  2. 通過入隊同步消費,並讓客戶端調用receive()

首先,我使用@JmsListener 這個注釋使Spring創建一個異步使用者,即它在隊列上創建了一個receive()

我嘗試使用MessageListener但是Spring繼續創建一個同步使用者。

因此,我查看了Spring JMS和ActiveMQ代碼。

創建異步使用者的唯一方法是使用MessageListener調用ActiveMQSession.createConsumer

public MessageConsumer createConsumer(Destination destination, MessageListener messageListener) throws JMSException {
    return createConsumer(destination, null, messageListener);
}

然后,我在Spring JMS上查找了類似的呼叫,但一無所獲。

目前,我認為Spring JMS無法使用MessageListener創建使用者,即無法創建同步使用者(作為上述第一種使用方式)。

我對嗎?

Spring JMS(顧名思義)使用JMS API。 它不會直接調用任何ActiveMQ代碼,因此此處的ActiveMQ實現細節無關緊要。 您引用的ActiveMQSessioncreateConsumer方法不是 JMS API的一部分,因此沒有理由Spring JMS會調用它。

您應該在Spring JMS代碼中查找javax.jms.MessageConsumer.setMessageListener(MessageListener listener)用法,因為這是通過JMS API設置MessageListener的方法。

從Spring JMS的SimpleMessageListenerContainer中調用setMessageListener方法(不是默認方法):

/**
 * Message listener container that uses the plain JMS client API's
 * {@code MessageConsumer.setMessageListener()} 
 * [...]
 */
 public class SimpleMessageListenerContainer

文檔說這個簡單的容器不支持XA事務: 請參閱此處

不幸的是,我需要它。

暫無
暫無

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

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