Rabbitmq 春季AMQP。处理信件交换。将消息发送到原始队列

Rabbitmq 春季AMQP。处理信件交换。将消息发送到原始队列,rabbitmq,spring-amqp,spring-rabbit,Rabbitmq,Spring Amqp,Spring Rabbit,在我的系统中,我使用与许多消费者队列的主题交换。每个队列都有它自己的非唯一路由密钥(例如,对于所有新实体来说是“add.#”,或者仅仅是使用所有事件的“#”)。 我想添加对延迟重试失败消息的支持。我看到的死信交换方法的最大问题是将消息直接发送到失败的队列。队列的路由密钥不是唯一的,即使我使用原始路由密钥重新向Exchange提交邮件,它也会被其他队列使用。 一种解决方案是“重试”交换,每个应用程序都将使用唯一的路由密钥(即原始队列名称)订阅该交换。但这听起来太复杂了,我想对开发人员隐瞒这种

在我的系统中,我使用与许多消费者队列的主题交换。每个队列都有它自己的非唯一路由密钥(例如,对于所有新实体来说是“add.#”,或者仅仅是使用所有事件的“#”)。

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

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

我想出了一个想法,即使用一个过滤器来检查“x-death”头,获取第一个队列(错误首先发生在那里的队列),并仅为适当的队列处理消息。否则-确认消息。


可以用Spring AMQP实现这种行为吗?我正在查看<强>消息处理程序< /St>,但是如何确认它的消息?

如果您真的只关心目标队列,那么您需要考虑在<代码>默认的Exchange < /代码>中重新发布的一个变体,它具有以下能力:

默认交换隐式绑定到每个队列,路由密钥等于队列名称。无法显式绑定到默认exchange或从默认exchange取消绑定。它也不能被删除


请注意与队列名称相同的
路由键。我会考虑处理一个<代码> AMQPHEADEDS.EuffelyQueQue,并在重试过程中使用它的值作为重新发布到默认交换机(<代码>)/>代码>的路由键。因此,您需要考虑在<代码>默认Exchange 中重新发布的一个变体,它具有以下能力:

默认交换隐式绑定到每个队列,路由密钥等于队列名称。无法显式绑定到默认exchange或从默认exchange取消绑定。它也不能被删除

请注意与队列名称相同的
路由键。在重试过程中,我会考虑处理<代码> AMQPHEADEDS.EuffelyQueQue,并将其值用作路由密钥,以便在重试过程中重新发布到默认Exchange(<代码>)>代码>。