1

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

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

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

4

2 回答 2

3

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

如果您想将消息发送回队列中,然后再进行重新处理,那么您需要进行我在这篇文章中描述的设置。

RabbitMQ 中的死信死信消息

希望这对你有帮助。

于 2016-04-08T16:32:24.830 回答
0

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

于 2016-04-11T09:46:22.643 回答