春季AMQP。交易信交换。将邮件发送到原始队列

时间:2018-08-16 16:47:53

标签: rabbitmq spring-amqp spring-rabbit spring-rabbitmq

在我的系统中,我将主题交换与大量使用者队列一起使用。每个队列都有其自己的非唯一路由键(例如,所有新实体都使用“ add。#”,或者使用“#”来消耗所有事件)。

我想添加一些延迟重试失败消息的支持。我看到的死信交换方法最大的问题是将消息直接发送到失败的队列。队列的路由密钥不是唯一的,即使我使用原始路由密钥将邮件重新提交给Exchange,其他队列也会使用它。

一种解决方案是进行“重试”交换,每个应用程序都将使用唯一的路由密钥(例如原始队列名称)订阅。但这听起来太复杂了,我想向开发人员隐藏这种基础结构的复杂性。

我想到了一个过滤器,该过滤器将检查“ x-death”报头,获取第一个队列(首先发生错误的队列),并仅为适当的队列处理消息。否则-确认消息。

Spring AMQP是否可以实现此行为?我正在研究 MessagePostProcessor ,但是如何确认来自其中的消息?

1 个答案:

答案 0 :(得分:2)

如果您真的只担心目标队列,那么您需要考虑在default exchange中重新发布的变体,它具有以下功能:

  

默认交换隐式绑定到每个队列,并且路由键等于队列名称。不能显式绑定到默认交换或与之解除绑定。也无法删除。

请注意routing key equal to the queue name部分。我会考虑处理AmqpHeaders.CONSUMER_QUEUE,并在重试过程中将其值用作重新发布到默认交换机("")的路由键。