如何使用@JmsListener 暂停和开始使用消息
How to pause and start consuming message using @JmsListener
我正在使用 spring 引导版本 1.3.2。我正在使用 @JmsListener 为我使用 JmsTemplate created/produced 的消息使用来自 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 启动,我在应用程序属性中添加了 activemq 连接参数,我不需要编写任何代码来创建连接工厂、设置队列...等等,你能帮忙看看如何做到这一点吗?
获取对 JmsListenerEndpointRegistry
bean 的引用(例如 @Autowire
)并调用 stop()
- 它会停止所有侦听器。 start()
将启动所有侦听器。
如果您有多个侦听器并且只想停止 1 个,请给它一个 id
属性并使用 registry.getListenerContainer(id)
,然后 stop/start 容器本身。
我正在使用 spring 引导版本 1.3.2。我正在使用 @JmsListener 为我使用 JmsTemplate created/produced 的消息使用来自 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 启动,我在应用程序属性中添加了 activemq 连接参数,我不需要编写任何代码来创建连接工厂、设置队列...等等,你能帮忙看看如何做到这一点吗?
获取对 JmsListenerEndpointRegistry
bean 的引用(例如 @Autowire
)并调用 stop()
- 它会停止所有侦听器。 start()
将启动所有侦听器。
如果您有多个侦听器并且只想停止 1 个,请给它一个 id
属性并使用 registry.getListenerContainer(id)
,然后 stop/start 容器本身。