【发布时间】:2012-12-04 23:00:07
【问题描述】:
我正在使用 SimpleMessageListenerContainer 异步使用消息。该消息调用我的服务层上的方法,我故意抛出异常以测试事务的回滚。我希望将消息发送回队列的末尾,但它不会发生。有人可以帮助我吗?
【问题讨论】:
标签: spring-amqp
我正在使用 SimpleMessageListenerContainer 异步使用消息。该消息调用我的服务层上的方法,我故意抛出异常以测试事务的回滚。我希望将消息发送回队列的末尾,但它不会发生。有人可以帮助我吗?
【问题讨论】:
标签: spring-amqp
确保已将 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;
}
【讨论】: