【发布时间】:2012-02-28 23:56:42
【问题描述】:
条件:
1) 使用休眠事务管理器 2) 队列被标记为事务性 3)使用与 spring-amqp 捆绑的 SimpleMessageListenerContainer 来触发消息的消费者。
场景:
消费者由于某些意外错误而生成异常,导致休眠事务回滚,并且消息被重新排队。这由容器负责。
由于 SimpleMessageContainer 的编写方式,我找不到从队列中删除消息并让平台事务管理器回滚的方法。通道和事务管理器要么都回滚,要么操作通过。
我想做的是通过在消息上填充一个字段来将消息标记为异常失败,这样当它返回给另一个消费者时,我可以使用 AOP 建议分析消息的状态,然后重新路由消息到另一个交易所。
我似乎无法更改消息的正文,或在rabbitmq 中添加标头来标记消息。每次返回的消息都是原始消息。
如何标记消息?
其他人如何在回滚事务的同时解决异常消息的重新路由问题?
【问题讨论】:
标签: rabbitmq spring-amqp