在我的系统中,我将主题交换与大量使用者队列一起使用。每个队列都有其自己的非唯一路由键(例如,所有新实体都使用“ add。#”,或者使用“#”来消耗所有事件)。
我想添加一些延迟重试失败消息的支持。我看到的死信交换方法最大的问题是将消息直接发送到失败的队列。队列的路由密钥不是唯一的,即使我使用原始路由密钥将邮件重新提交给Exchange,其他队列也会使用它。
一种解决方案是进行“重试”交换,每个应用程序都将使用唯一的路由密钥(例如原始队列名称)订阅。但这听起来太复杂了,我想向开发人员隐藏这种基础结构的复杂性。
我想到了一个过滤器,该过滤器将检查“ x-death”报头,获取第一个队列(首先发生错误的队列),并仅为适当的队列处理消息。否则-确认消息。
Spring AMQP是否可以实现此行为?我正在研究 MessagePostProcessor ,但是如何确认来自其中的消息?
答案 0 :(得分:2)
如果您真的只担心目标队列,那么您需要考虑在default exchange
中重新发布的变体,它具有以下功能:
默认交换隐式绑定到每个队列,并且路由键等于队列名称。不能显式绑定到默认交换或与之解除绑定。也无法删除。
请注意routing key equal to the queue name
部分。我会考虑处理AmqpHeaders.CONSUMER_QUEUE
,并在重试过程中将其值用作重新发布到默认交换机(""
)的路由键。