如何使用@JmsListener暂停和开始使用消息

时间:2016-03-16 21:01:46

标签: java spring-boot activemq spring-jms

我使用的是spring boot 1.3.2版。我正在使用@JmsListener来使用来自activemq的消息来获取我使用JmsTemplate创建/生成的消息。这是代码:

@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连接参数,我不需要编写任何代码来创建连接工厂,设置队列......等等,你能帮忙解决一下这个问题吗?

1 个答案:

答案 0 :(得分:1)

获取JmsListenerEndpointRegistry bean的引用(例如@Autowire)并调用stop() - 它将停止所有侦听器。 start()将启动所有听众。

如果您有多个侦听器并且只想停止1,请为其指定id属性并使用registry.getListenerContainer(id),然后停止/启动容器本身。