![](/img/trans.png)
[英]Synchronous & Asynchronous Message Receiver in 1 queue (Spring w/ ActiveMQ) JMS API
[英]Asynchronous consumption with Spring JMS - ActiveMQ
ActiveMQ有兩種消費方式:
MessageListener
異步消費 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實現細節無關緊要。 您引用的ActiveMQSession
的createConsumer
方法不是 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.