大佬教程收集整理的这篇文章主要介绍了java – Spring AMQP(Rabbit)监听器在出现异常时进入循环,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@Bean
RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(rabbitConnectionFactory());
template.setmessageConverter(messageConverter);
template.setExchange(amqpProperties.getRabbitMqTopicExchangename());
return template;
}
@Bean
@Conditional (OperationsCondition.class)
SimplemessageListenerContainer opsmessageListenerContainer() {
return listenerContainer(amqpProperties.getRabbitMqOperationsQueue(),amqpProperties.geTinitialRabbitOperationsConsumerCount(),amqpProperties.getMaximumRabbitOperationsConsumerCount(),opsReceiver());
}
@Bean
@Conditional (OperationsCondition.class)
OperationsListener opsReceiver() {
return new operationsListener();
}
private SimplemessageListenerContainer listenerContainer(String queue,int initConsumers,int maxConsumers,messageListener listener)
{
SimplemessageListenerContainer container = new SimplemessageListenerContainer();
container.setConnectionFactory(rabbitConnectionFactory());
container.setQueuenames(queuE);
container.setmessageListener(listener);
container.setConcurrentConsumers(initConsumers);
container.setMaxConcurrentConsumers(maxConsumers);
container.setmessageConverter(messageConverter);
return container;
}
消息监听器是:
public class OperationsListener implements messageListener
{
public static final Logger logger = Logger.geTinstance(OperationsListener.class);
@Autowired (required=truE)
private OperationsProcessor processor;
@Autowired (required=truE)
private ObjectMapper objectMapper;
public void onmessage(message messagE)
{
Jackson2JsonmessageConverter converter = new Jackson2JsonmessageConverter();
converter.setJsonObjectMapper(objectMapper);
Operationsmessage request = (OperationsmessagE)converter.frommessage(messagE);
processor.createmessage(request);
//This is throwing a JPA database exception
processor.createOperation(request);
}
}
processor.createOperation()因数据库问题而抛出异常.问题是消息监听器进入循环并且消息不断回来.
我的处理器类:
@Component
@transactional (propagation = Propagation.requIRES_NEW)
public class OperationsProcessor
{
...............
public void createOperation(Operationsmessage messagE)
{
try
{
.............
.............
//this call throws exception.
opsRepo.create(operation,null);
}
catch (Exception E)
{
logger.error(E);
}
}
}
opsRepo.create抛出异常.即使我正在捕捉错误,我希望春天amqp不再发送该消息.不确定为什么同样的消息不断回来.
编辑:
我想我找到了一些关于如何处理这个问题的建议.原因是春天在失败时重新发生事件,这是默认的性质.
找到了一个有用的主题here和here.
以上是大佬教程为你收集整理的java – Spring AMQP(Rabbit)监听器在出现异常时进入循环全部内容,希望文章能够帮你解决java – Spring AMQP(Rabbit)监听器在出现异常时进入循环所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。