当前位置: 首页 > 知识库问答 >
问题:

RabbitMQ:死信消息会再次死亡吗?

魏书
2023-03-14

我们已经实现了延迟消息处理,有2个队列和x-死信-交换/x-消息-ttl,在queue1中的消息超时后,它将转到queue2。

现在是否有可能设置RabbitMQ,以便如果在处理来自queue2的消息时,我们将其拒绝为“死信”,那么它将自动转到queue3?我担心的是queue2中的消息已经标记为“已死”,有没有办法区分那些因为被拒绝而死的消息,并自动只将那些放在队列3中?

共有1个答案

傅宏恺
2023-03-14

是的,这条消息有可能多次出现死信。

要查看消息死信的原因,请查看<code>x-death

有关更多详细信息,请参阅死信交换手册中的死信消息部分。

UPD:

RabbitMQ官方用户组中讨论了只有在被拒绝的情况下才能移动死字消息吗?:

...

我的担忧如下:由于消息已经被TTL死信,那么有没有办法将它们从Queue2移动到Queue3,只有当它们被拒绝时?

严格地回答你的问题,不:你不能选择在哪些事件上死信。

然而,我认为您真正想问的是,“队列2中的所有消息不会立即以死信发送到队列3,因为它们已经死信一次了吗?”答案是否定的;一旦一条消息被死信发送到queue2,那么它就是一个自由代理,只有当它再次执行死信时才会再次死信。

 类似资料:
  • 我正在尝试设置我的第一个RabbitMQ死信交换,下面是我通过web管理界面使用的步骤: 创建名称为“dead.letter.test”的新直接交换 创建新队列“dead.letter.queue” 将“dead.letter.queue”绑定到“dead.letter.test” 创建新队列“test1”,并将死信交换设置为“dead.letter.test” 将消息发送到“test1” NAC

  • 这种需求类似于通过公开的REST服务API(Spring Boot)处理来自死信队列的消息。以便一旦调用REST服务,就会从DL队列中消耗一条消息,并将再次发布到主队列中进行处理。@RabbitListener(queues=“queue_name”)立即使用消息,这在场景中是不需要的。该消息只需由REST服务API使用。有什么建议或解决办法吗?

  • 我正在开发一个应用程序,它作为服务运行,并等待消息。在我查看了日志之后,我发现Android非常经常会杀死和重启许多进程!这不仅发生在我的app上,其他很多服务也是一样的。 我看不出这有什么原因,我的设备有足够的内存。我用运行Android4.0.4的索尼Xperia S进行测试。这是正常还是bug? 下面是日志的一部分,向你展示我的意思: 02-04 15:02:38.791 320 332 I

  • 我有RabbitMQ的工作配置-使用TTL从等待(死信)的主队列中发送消息,并在到期时将其抛出: 对于应用程序中的Spring云流,我不能重复相同的方案。yml公司 我将非常感谢您在应用程序中提供的帮助和工作示例。yml公司

  • TL;DR:一旦我修复了最初导致消息被拒绝的消费者代码,我需要将死信消息“重放”回其原始队列中。 我已经为RabbitMQ配置了死信交换(DLX),并成功地将拒绝的消息路由到死信队列。但现在我想查看死信队列中的消息,并尝试决定如何处理每个消息。一些(许多?)一旦有问题的消费者代码被修复,这些消息中的所有消息都应该重放(重新排队)到它们的原始队列(在“x-death”标题中可用)。但我该怎么做呢?我

  • 问题内容: 我想在一段时间后在我的一个工人中收到一条消息。在发现了所谓的死信交换之后,我决定使用Node和RabbitMQ。 该消息似乎已发送到DeadExchange中的队列,但是使用方在WorkExchange中的WorkQueue中经过了一段时间之后,使用者再也没有收到该消息。要么bindQueue关闭,要么死信不起作用? 我现在尝试 了很多 不同的值。有人可以指出我所缺少的吗? 我正在使用