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