- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Spring 和 RabbitMQ,我设置了两个主题交换 x
和dlx
和两个队列q
和dlq
。 q
绑定(bind)到x
和dlq
至dlx
。 dlx
被配置为 q
的死信交换.
当 q
中出现一条消息时被拒绝(取消队列),它已成功发送到 dlx
然后到dlq
.
现在我使用 shovel-plugin 来移动 dlq
中的死信消息返回q
。只要这次消息处理成功(ack),这就成功了。
但是如果其中一条消息被铲入 q
再次被拒绝,它就被默默地丢弃了。我希望它会发送到 DLX dlx
再次。是我配置错误还是我误解了 DLX 或铲子的概念?
最佳答案
我怀疑你正在尝试这种味道......
It is possible to form a cycle of message dead-lettering. For instance, this can happen when a queue dead-letters messages to the default exchange without specifiying a dead-letter routing key. Messages in such cycles (i.e. messages that reach the same queue twice) will be dropped if there was no rejections in the entire cycle.
...因为你在铲土。请参阅Dead Letter Exchanges .
相反,请使用 TTL 和死信配置来配置 DLQ,以将过期消息路由回原始队列。这样,x-death
header 就会获得两个条目 - 1 表示来自原始队列的拒绝,1 表示来自 DLQ 的到期。
我猜测,通过铲子,经纪人认为存在一个循环。
关于java - 从一个队列铲到另一个队列后如何拒绝消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50095283/
我是一名优秀的程序员,十分优秀!