Spring   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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不再发送该消息.不确定为什么同样的消息不断回来.

编辑:

我想我找到了一些关于如何处理这个问题的建议.原因是春天在失败时重新发生事件,这是认的性质.
找到了一个有用的主题herehere.

最佳答案

大佬总结

以上是大佬教程为你收集整理的java – Spring AMQP(Rabbit)监听器在出现异常时进入循环全部内容,希望文章能够帮你解决java – Spring AMQP(Rabbit)监听器在出现异常时进入循环所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。