当事务回滚时,在队列末尾重新排队消息

时间:2012-12-04 23:00:08

标签: spring-amqp

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

1 个答案:

答案 0 :(得分:0)

确保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;
}