Skip to main content
 首页 » 编程设计

rabbitmq之RabbitMQ中的Ack或Nack

2025年05月04日224zhenyulu

我正在使用RabbitMQ,我使用basic_get从队列中获取所有消息,而没有自动确认过程,这意味着消息会一直保留在队列中,直到我确认或拒绝消息为止。

有时,由于某些异常,我的消息无法处理,从而导致无法完全处理它们。

问题是,如果我同时成功确认消息并抛出异常,那将有什么关系?我的意思是,结果消息将始终脱离队列,因此,在这种情况下使用ack或nack有什么关系?
也许我错过了每次使用操作时的一些知识?

请您参考如下方法:

basic.nack命令显然是RabbitMQ扩展,它扩展了basic.reject的功能以包括批量处理模式。两者都包含requeue的“位”(即 bool(boolean) 值)标志,因此您实际上有多种选择:

  • nack / rejectrequeue=1:消息将被返回到它来自的队列,就好像它是一条新消息一样;如果使用者方
  • 暂时失败,这可能很有用
    带有 nack和已配置的死信交换(DLX)的
  • reject / requeue=0,会将消息发布到该交换,从而允许它被另一个队列
  • 接收
  • nack / rejectrequeue=0,没有DLX会简单地丢弃消息
  • 即使配置了DLX,ack也会从队列中删除消息

  • 如果未配置DLX,则始终使用 ack将与 nack / rejectrequeue=0相同;但是,从一开始就使用逻辑上正确的功能将为您提供更大的灵活性,以便以后进行不同的配置。