rabbitmq - 弹簧 AMQP。交易信交换。将消息发送到原始队列
问题描述
在我的系统中,我使用具有大量消费者队列的主题交换。每个队列都有自己的非唯一路由键(fe 'add.#' 用于所有新实体,或者只是 '#' 来消耗所有事件)。
我想添加对延迟重试失败消息的支持。我在死信交换方法中看到的最大问题是将消息直接发送到失败的队列。队列的路由键不是唯一的,即使我用原来的路由键向 Exchange 重新提交了一条消息,它也会被其他队列消费。
一种解决方案是进行“重试”交换,每个应用程序都将使用唯一的路由密钥(原始队列名称)订阅它。但这听起来太复杂了,我想对开发人员隐藏这种基础设施的复杂性。
我想出了一个想法,有一个过滤器将检查“x-death”标头,获取第一个队列(首先发生错误的队列),并仅为适当的队列处理消息。否则 - 确认消息。
是否可以使用 Spring AMQP 实现此行为?我正在调查MessagePostProcessor,但如何确认来自它的消息?
解决方案
如果您真的只担心目标队列,那么您需要考虑一个default exchange
具有以下功能的具有重新发布功能的变体:
默认交换隐式绑定到每个队列,路由键等于队列名称。无法显式绑定或取消绑定默认交换。也无法删除。
注意routing key equal to the queue name
部分。我会考虑处理 aAmqpHeaders.CONSUMER_QUEUE
并将其值用作路由键,以便""
在重试过程中重新发布到默认交换 ( )。
推荐阅读
- r - devtools::document() 将“Writing NAMESPACE”打印到控制台两次
- java - 交换数组中的值以使顺序从最小到最大
- wcf - 如何使用代理访问 .net core 中的 wcf 服务
- html - 如何在每个元素周围放置边框?
- python - 尝试使用“import re”来匹配 txt 文件中区分大小写的密码,但它不起作用
- javascript - 如何创建可滚动的卡片行,如 DuckDuckGo/Google 搜索实现的卡片?
- scala - 将两个可选列提取到 Slick 中的案例类中
- c - 打印一个函数返回的字符串。我这里有两种情况,一种返回指向字符串的指针,另一种返回 char 数组
- c++ - 一个消除元音编译错误的函数
- c++ - 用 std::conditional 继承