在 RabbitMQ 工作队列中返回 NACKed 请求

Returning NACKed requests in RabbitMQ work queues

我正在尝试使用 RabbitMQ 实现工作队列架构。我有一个发送方应用程序和多个消费者。

我对消费者使用手动ack,所以如果处理请求失败,它将重新排队等待另一个消费者处理。

我想知道如果所有消费者 return 拒绝特定请求会发生什么。有没有办法识别这种行为并将请求标记为 'dead' 以便将其重新路由到死信交换?在这种情况下,我希望在绑定到死信交换的队列上打开一个单独的消费者,并接收任何消费者未能处理的所有消息(用于记录目的或在本地执行此请求的任务,而无需分发)消费者)。

我的另一个问题。当从消费者收到 NACK 后重新排队请求时,它会尝试将此请求发送给其他消费者还是会尝试发送给第一个可用的消费者,即使它已经拒绝了请求?

谢谢

  1. 不,RabbitMQ 中没有这样的功能。您可以处理异常,并针对特定异常将消息发送到死队列,或者如果知道该消息必须存在的最长时间,请在队列上配置 TTL。
  2. 如果您拒绝消息,它将转到下一个可用的消费者