Java 异常时停止AMQ MessageListenerAdapter
我对AMQ相当陌生,我确实理解生成消息、将消息发送到队列并异步使用消息的概念 我的主要弹簧配置如下Java 异常时停止AMQ MessageListenerAdapter,java,activemq,Java,Activemq,我对AMQ相当陌生,我确实理解生成消息、将消息发送到队列并异步使用消息的概念 我的主要弹簧配置如下 @Bean public DefaultMessageListenerContainer listenerContainer( MessageListenerAdapter adapter) { DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
@Bean
public DefaultMessageListenerContainer listenerContainer(
MessageListenerAdapter adapter) {
DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
dmlc.setConnectionFactory(connectionFactory());
dmlc.setMessageListener(adapter);
dmlc.setDestinationName("myQueue");
dmlc.setConcurrentConsumers(5);
return dmlc;
}
@Bean
MessageListenerAdapter adapter(MyClass myClass) {
MessageListenerAdapter messageListener = new MessageListenerAdapter(
myClass);
messageListener.setDefaultListenerMethod("myMethod");
return messageListener;
}
@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate jt = new JmsTemplate(connectionFactory());
return jt;
}
使用jmsTemplate.convertAndSend()将内容发送到队列,然后使用myClass#myMethod接收它们,我没有任何问题
我的问题:如果引发异常,我需要侦听器停止使用消息。通常,异常会告诉我远程站点处于脱机状态,请稍后再试。如果我不停止,所有的信息都会丢失。希望在我能够再次发送之前保持队列已满
有可能吗?如果您使用简单的JMS事务,就可以避免在异常时丢失消息,而不必担心停止和启动侦听器
这是一个关于如何决定您需要的确认类型的很好的总结。事务需要比您正在使用的自动确认更复杂的设置。您可以在答案中找到一个很好的非spring示例 我刚发现我刚才在自动确认上。尝试了Session.CLIENT_ACKNOWLEDGE,它表示会将失败的邮件保留在队列中,但它会在发送之前一直停留在同一邮件上,有什么想法吗?您需要设置重新发送策略。客户机确认并不适用于所有情况,但也有其他例外情况不会处理。本文档很好地解释了每种模式默认提供的功能