在ttl之后,死信的消息没有被重新排队到原始队列

时间:2016-04-08 15:41:26

标签: rabbitmq amqp rabbitmq-exchange rabbitmqctl

我计划通过以下两个链接link1 link2来延迟处理队列中的邮件。所以,正如链接中所建议的那样。我已使用x-dead-letter-exchangex-dead-letter-routing-key args声明了原始队列。当消息未能被消费者处理或ttl发生或队列长度超过时,将消息发布到所谓的dead-letter-queue。现在,dead-letter-queue类似的args已与ttl参数一起设置。假设在ttl超过后将消息重新发布到原始队列。但问题是它丢弃了所有消息。

此外,这里有一个问题。如果我明确地将失败的消息从原始队列发布到死信队列。然后在ttl之后将消息重新发布到原始队列。为什么会这样,我如何使它工作。因此,死信队列将消息重新发布到原始队列而不是丢弃。我正在使用RabbitMQ 3.0.0

仅供参考,我创建了direct类型的交换以及路由密钥

1 个答案:

答案 0 :(得分:3)

当队列具有TTL设置时,意味着该队列中的消息将在TTL过期后发送到与该队列关联的死信交换(DLX)。如果队列没有分配DLX,则消息将进入位桶。

如果您想将邮件发送回重新处理的队列,那么您需要具有我在本文中描述的设置。

Dead-lettering dead-lettered messages in RabbitMQ

希望这对你有所帮助。