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

Dead-letterred messages not getting requeue to original queue after ttl

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

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

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

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

如果您想要将消息发送回队列以重新处理它们,那么您需要进行我在此 post 中描述的设置。

希望对你有所帮助。

假设您的原始交换是 x.notification 并且绑定到具有路由队列 A 的队列 q.A。并且您的死信交换 namae 是 dlx.notification。现在在队列中 q.A 设置 ttl 你想要等待的时间间隔和 dead-lleter-exchange 为 dlx.notification。现在创建另一个队列 dlq.A 以使用路由键 "A" 将过期消息从 dlx.notification 路由到 dlq.A。我认为这就是您实现目标所需要做的一切。