RabbitMQ-拒绝消息的不同死信交换和最大长度

RabbitMQ-拒绝消息的不同死信交换和最大长度,rabbitmq,Rabbitmq,根据,我有一个设置了最大长度参数的队列。对于该队列,还定义了死信交换 我注意到,无论是被拒绝的消息还是在达到最大长度时被删除的消息,最终都会在死信交换中结束 是否可以定义多个死信交换?一个用于拒绝的邮件,一个用于清除的邮件 更新 我不介意清除的消息被悄悄地丢弃,而不是转发到死信交换。这样,只有被拒绝的消息才会在死信交换中结束。这可能吗?这取决于您以后要如何处理这些消息。在我的例子中,我需要丢弃“已清除”的消息,因为我只想将已清除的消息重新发布到同一队列的尾部,以便在处理其余消息后重试 事实证明R

根据,我有一个设置了
最大长度
参数的队列。对于该队列,还定义了死信交换

我注意到,无论是被拒绝的消息还是在达到最大长度时被删除的消息,最终都会在死信交换中结束

是否可以定义多个死信交换?一个用于拒绝的邮件,一个用于清除的邮件

更新


我不介意清除的消息被悄悄地丢弃,而不是转发到死信交换。这样,只有被拒绝的消息才会在死信交换中结束。这可能吗?

这取决于您以后要如何处理这些消息。在我的例子中,我需要丢弃“已清除”的消息,因为我只想将已清除的消息重新发布到同一队列的尾部,以便在处理其余消息后重试

事实证明RabbitMQ已经考虑过这个用例。发件人:

有可能形成一个信息死字循环。例如,将死信消息排队到默认exchange而不指定死信路由密钥时,可能会发生这种情况。如果在整个周期中没有拒绝,则将丢弃此类周期中的消息(即两次到达同一队列的消息)


因此,如果创建循环,只有被拒绝的消息才会真正被重新路由到队列,而被清除的消息不会

我正在考虑将DLX exchange声明为
交换,然后基于
x-death.reason
(绑定时设置了
x-match=any
参数)将消息路由到特定队列。唯一的问题是,我不太确定嵌套标头列表上的路由是否可行(至少我无法在管理面板上快速运行)。我在同一个区域中思考,但我不认为嵌套标头上的路由是可行的:(.考虑到我没有收到任何响应,我想这是不可能的。你不需要为此进行单独的交换,你可以简单地添加一个死信路由密钥,你可以将不同的队列绑定到交换,然后根据路由密钥,它们将在单独的队列中结束。我想这就是你想要的。