【发布时间】:2015-08-03 13:24:02
【问题描述】:
有没有办法确保当您 NACK 一条消息并将其发送到死信交换/队列时,该消息将是持久的?默认情况下,即使使用 SetPersistent(true) 将原始消息设置为持久性,死信消息也不会遵循套件。
【问题讨论】:
-
是否有理由不将整个死信队列设置为持久化?
-
这是一个选项吗?到目前为止,我只发现您可以在消息级别设置持久性。由于rabbit处理死信发布,我无法找到一种方法让它在BasicProperties(delivery_mode = 2)中设置持久位。
-
是的,您可以使整个队列持久化。 Rabbit 使用的术语是“耐用”。这意味着队列将在兔子和/或服务器关闭后存活
-
不完全是,持久性仅适用于队列配置;不是其中的消息。如果在服务重新启动或崩溃时添加没有 delivery_mode = 2(或 .net 客户端中的 SetPersistent(true))的消息,则队列中的所有消息都会丢失。我已经验证了这种行为。问题是兔子不会以与原始消息相同的持久性来编写死信消息。所以服务重启会丢弃死队列中的所有消息。
-
如果消息被标记为持久并且DLQ标记为持久,则消息应该被持久化。使用 RabbitMQ 3.5 测试
标签: rabbitmq dead-letter