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

Posted

技术标签:

【中文标题】如何使用@JmsListener 暂停并开始使用消息【英文标题】:How to pause and start consuming message using @JmsListener 【发布时间】:2016-07-02 23:47:57 【问题描述】:

我使用的是 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)
        
    

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

【问题讨论】:

这就是你需要的:***.com/questions/32588352/… 【参考方案1】:

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

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

【讨论】:

以上是关于如何使用@JmsListener 暂停并开始使用消息的主要内容,如果未能解决你的问题,请参考以下文章

如何访问@JmsListener使用的Spring Boot中的活动JMS连接/会话

如何等待@JMSListener注释方法在JUnit中完成

如何在启动时以编程方式禁用 Spring @JmsListener

Spring JMS:为@JmsListener注解的方法设置ErrorHandler

Spring 4.1 @JmsListener 配置

如何在 SwiftUI 中暂停动画?