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

bha*_*sky 0 java activemq-classic spring-jms spring-boot

我使用的是 Spring Boot 1.3.2 版。我正在使用@JmsListener 为我使用 JmsTemplate 创建/生成的消息使用来自 activemq 的消息。这是代码:

@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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当 smtp 出现连接失败错误时,我想暂停 @JmsListener 一段时间,然后重新开始使用消息。对于使用@JmsListener 的这个用例,我还没有看到更好的示例。由于我使用的是spring boot,我在应用程序属性中添加了activemq连接参数,我不需要编写任何代码来创建连接工厂,设置队列......等你能帮忙吗?

Gar*_*ell 5

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

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