首页 > 解决方案 > 弹簧 AMQP。交易信交换。将消息发送到原始队列

问题描述

在我的系统中,我使用具有大量消费者队列的主题交换。每个队列都有自己的非唯一路由键(fe 'add.#' 用于所有新实体,或者只是 '#' 来消耗所有事件)。

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

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

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

是否可以使用 Spring AMQP 实现此行为?我正在调查MessagePostProcessor,但如何确认来自它的消息?

标签: rabbitmqspring-amqpspring-rabbit

解决方案


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

默认交换隐式绑定到每个队列,路由键等于队列名称。无法显式绑定或取消绑定默认交换。也无法删除。

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


推荐阅读