问题描述
我正在使用Spring Boot版本1.3.2。我正在使用@JmsListener消耗来自activemq的消息,以获取我使用JmsTemplate创建/产生的消息。下面是代码:
I am using spring boot version 1.3.2. I am using @JmsListener to consume message from activemq for the message that I created/produced using JmsTemplate. Here is the code:
@JmsListener(destination = "myqueue")
public void consumeMsg(Object requestBody)
try {
javaMailSender.send(requestBody);
} catch (MailException ex) {
LOG.error(ex.getLocalizedMessage(), ex);
if(ex.getMessage().contains(SMTP_CONNECTION_FAILURE) && activeMqMsg.getIntProperty("RETRYCOUNT") == 1) {
producer.send("myqueue",requestBody)
}
else {
producer.send("manualqueue",requestBody)
}
}
}
现在,当smtp出现连接失败错误时,我想暂停@JmsListener一段时间,然后再次开始使用该消息。对于使用@JmsListener的用例,我还没有看到更好的示例。由于我使用的是Spring Boot,因此我已在应用程序属性中添加了activemq连接参数,无需编写任何代码即可创建连接工厂,设置队列...等等,您能帮忙怎么做吗?
now when there is a connection failure error from smtp, I want to pause the @JmsListener for SOME time and start again to consume the message. I have not seen a better example for this use case using @JmsListener. Since I am using spring boot, I have added activemq connection parameters in application properties, I do not need to write any code to create connection factory, setting queue...etc can you help out how to do this?
推荐答案
获取对 JmsListenerEndpointRegistry
bean的引用(例如 @Autowire
)并调用 stop()
-它会停止所有监听器。 start()
将启动所有侦听器。
Get a reference to the JmsListenerEndpointRegistry
bean (e.g. @Autowire
) and call stop()
- it will stop all listeners. start()
will start all listeners.
如果您有多个侦听器并且只想停止1,请给它 id
属性并使用 registry.getListenerContainer(id)
,然后停止/启动容器本身。
If you have multiple listeners and only want to stop 1, give it an id
attribute and use registry.getListenerContainer(id)
, then stop/start the container itself.
这篇关于如何使用@JmsListener暂停和开始使用消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!