RabbitMQ回滚事务和重新路由消息

时间:2012-02-28 23:56:42

标签: rabbitmq spring-amqp

条件:

1)使用hibernate事务管理器 2)队列被标记为事务性 3)使用与spring-amqp捆绑在一起的SimpleMessageListenerContainer来触发消息的使用者。

场景:

由于某些意外错误导致hibernate事务回滚,并且消息要重新排队,因此消费者会生成异常。这是由容器处理的。

由于SimpleMessageContainer的编写方式,我无法找到从队列中删除消息的方法。让平台事务管理器回滚。频道&事务管理器都回滚或操作通过。

我想做的是通过填充消息上的字段将消息标记为异常失败,这样当它返回到另一个消费者时,我可以使用AOP建议分析消息的状态,然后重新路由留言给另一个交易所。

我似乎无法改变消息的正文,或添加标题来标记rabbitmq中的消息。每次消息重新出现时都是原始消息。

我如何标记邮件?

在回滚交易时,其他人如何设法解决异常消息的重新路由?

1 个答案:

答案 0 :(得分:0)

有一个名为“x-dead-letter-exchange”的队列参数,用于指定交换,如果消息被拒绝或过期,将重新发布消息。