Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rabbitmq ttl后死信红色消息未重新加入原始队列_Rabbitmq_Amqp_Rabbitmq Exchange_Rabbitmqctl - Fatal编程技术网

Rabbitmq ttl后死信红色消息未重新加入原始队列

Rabbitmq ttl后死信红色消息未重新加入原始队列,rabbitmq,amqp,rabbitmq-exchange,rabbitmqctl,Rabbitmq,Amqp,Rabbitmq Exchange,Rabbitmqctl,我计划通过以下两个链接延迟队列中消息的处理。因此,正如链接中所建议的那样。我已经用x-dead-letter-exchange和x-dead-letter-routing-keyargs声明了原始队列。当消息未能被消费者处理或ttl发生或队列长度超过时,它将消息发布到所谓的死信队列。现在在死信队列中设置了类似的参数以及ttl参数。假设在ttlexcept之后将消息重新发布到原始队列。但问题是它正在删除所有消息 此外,这里还有一个陷阱。如果我将失败消息从原始队列显式发布到死信队列。然后在ttl之后

我计划通过以下两个链接延迟队列中消息的处理。因此,正如链接中所建议的那样。我已经用
x-dead-letter-exchange
x-dead-letter-routing-key
args声明了原始队列。当消息未能被消费者处理或ttl发生或队列长度超过时,它将消息发布到所谓的死信队列。现在在
死信队列中
设置了类似的参数以及
ttl
参数。假设在
ttl
except之后将消息重新发布到原始队列。但问题是它正在删除所有消息

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


仅供参考,当队列具有TTL设置时,我已创建了
direct
类型的交换以及路由密钥,这意味着该队列中的消息将在TTL过期后发送到与该队列关联的死信交换(DLX)。如果队列没有分配DLX,则消息进入位存储桶

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


希望这对您有所帮助。

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

而不是按照你的建议去做。我们还可以将失败的消息从原始队列显式发布到死信队列,而不是借助
x-dead-letter-exchange
x-dead-letter-routing-key
。然后,死信队列也会在ttl之后将消息重新发布到其原始队列。因此,我无法理解显式发布消息和通过内置功能发布消息的区别。您描述的方式只有在只有一个队列的情况下才有效。在我的链接中,这种方法适用于将N个死信队列放入一个重试队列中。无论如何,但为什么显式发布消息和通过内置功能发布消息有区别呢。您有什么想法吗?请告诉我如何保持失败消息的计数。您是否使用了一些内置功能,或者您维护了自定义的计数变量,并且每次重试时都递增。@naresh,我递增的是客户变量。这是我的公用事业服务: