2

条件:

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

设想 :

消费者由于某些意外错误而产生异常,导致休眠事务回滚,并且消息被重新排队。这是由容器处理的。

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

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

我似乎无法更改消息的正文,或添加标头以在 rabbitmq 中标记消息。每次返回的消息都是原始消息。

我如何标记消息?

其他人如何在回滚事务的同时设法解决异常消息的重新路由?

4

1 回答 1

0

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

于 2013-03-27T18:05:23.840 回答