RabbitMQ-如何死信/处理过期队列中的消息?

RabbitMQ-如何死信/处理过期队列中的消息?,rabbitmq,Rabbitmq,我有一个已设置了x-expires的队列。我遇到的问题是,如果队列过期,我需要对队列中的消息进行进一步处理。我最初的想法是在队列上设置x-dead-letter-exchange。但是,当队列过期时,消息将消失,而不会进入死信交换 如何处理过期队列中的死信或其他消息?您需要添加一个新的死信队列,该队列绑定到死信交换,绑定路由密钥设置为原始队列名称。这样,发送到死信交换的所有过期邮件都会被路由到死信队列。如评论中所建议的,您不能仅依靠x-expire功能来完成此操作。但在我遇到的类似案例中,一个有

我有一个已设置了
x-expires
的队列。我遇到的问题是,如果队列过期,我需要对队列中的消息进行进一步处理。我最初的想法是在队列上设置
x-dead-letter-exchange
。但是,当队列过期时,消息将消失,而不会进入死信交换


如何处理过期队列中的死信或其他消息?

您需要添加一个新的死信队列,该队列绑定到死信交换,绑定路由密钥设置为原始队列名称。这样,发送到死信交换的所有过期邮件都会被路由到死信队列。

如评论中所建议的,您不能仅依靠
x-expire
功能来完成此操作。但在我遇到的类似案例中,一个有效的解决方案是:

  • 使用
    x-message-ttl
    确保消息在未及时使用的情况下死亡
  • 将死信交换分配给将路由所有这些消息的队列
  • 使用
    x-expires
    将队列过期设置为高于消息TTL的值
  • (这是一个棘手的部分)假设您可以控制您的消费者,在最后一个消费者脱机之前,删除与“垂死”队列的绑定,可能是通过-这将阻止新消息路由到队列

  • 这样,在最后一个消费者死亡之前发布的消息已被处理,现有消息将在队列过期之前被写死,新消息无法进入队列。

    您不能,至少根据以下内容:“…队列过期不会使队列中的消息死信。”我没有忘记你的回答。我还没来得及试一试。一旦我这样做,我会将其标记为正确或注释。
    x-expires
    设置将触发队列删除的非活动时间,而不是其中消息的TTL。因此,我相信这个答案中解释的机制在这种情况下不起作用。