【问题标题】:Re-queuing messages at the end of a queue when a transaction rolled back事务回滚时在队列末尾重新排队消息
【发布时间】:2012-12-04 23:00:07
【问题描述】:

我正在使用 SimpleMessageListenerContainer 异步使用消息。该消息调用我的服务层上的方法,我故意抛出异常以测试事务的回滚。我希望将消息发送回队列的末尾,但它不会发生。有人可以帮助我吗?

【问题讨论】:

    标签: spring-amqp


    【解决方案1】:

    确保已将 setChannelTransacted 设置为 true,并且在 SimpleMessageListenerContainer 上设置了 RabbitTransactionManager。如果您发布了您的配置,将会很有帮助。此外,在抛出异常时,请确保您没有抛出 AMQPRejectAndDontRequeueException,因为这明确告诉 spring-amqp 无论您的整体配置如何都不要重新排队。

    @Bean
    public SimpleMessageListenerContainer messageListenerContainer()
    {
        SimpleMessageListenerContainer result = new SimpleMessageListenerContainer();
        result.setConnectionFactory(connectionFactory);
        result.setTransactionManager(rabbitTxManager);
        result.setChannelTransacted(true);
        result.setMessageListener(myMessageListener);
        result.setConcurrentConsumers(1);
        result.setQueues(myQueues);
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 1970-01-01
      • 2018-12-20
      • 2011-08-19
      • 2015-11-11
      • 1970-01-01
      • 2015-02-25
      • 2015-09-23
      • 2022-09-29
      相关资源
      最近更新 更多