我计划通过遵循这两个链接link1 link2来延迟队列中消息的处理。所以,正如链接中所建议的。我已经用x-dead-letter-exchange和x-dead-letter-routing-key args声明了原始队列。它将消息发布到所谓的dead-letter-queue中,当消息被使用者处理失败或发生ttl或队列长度超过时。现在,在dead-letter-queue中,类似的args与ttl参数一起被设置。它应该在ttl超出后将消息重新发布到原始队列。但问题是它放弃了所有的信息。
此外,这里有一个陷阱。如果我显式地将失败消息从原始队列发布到死信队列。然后,在ttl之后,将消息重新发布到原始队列。为什么会这样,我怎样才能做到这一点。这样,死信队列就可以将消息重新发布到原始队列中,而不是删除。我正在使用RabbitMQ 3.0.0。
我已经创建了direct类型的交换和路由密钥。
发布于 2016-04-08 16:32:24
当队列具有TTL设置时,这意味着该队列中的消息将在TTL过期后发送到与该队列关联的死信交换(DLX)。如果队列没有分配DLX,则消息进入位桶。
如果您想要将消息发送回重新处理它们的队列中,那么您需要有我在本文中描述的设置。
希望这对你有帮助。
发布于 2016-04-11 09:46:22
假设您的原始交换是x.notification,并绑定到队列q.A和路由队列A,而死信交换名称是dlx.notification。现在,在队列q.A中,将希望等待的时间间隔设置为dlx.notification,并将死-lleter-exchange设置为。现在创建另一个队列dlq.A,使用路由键"A“将过期的消息从dlx.notification路由到dlq.A。我认为这就是你实现目标所需要做的一切。
https://stackoverflow.com/questions/36503804
复制相似问题