我正在使用RabbitMQ,我使用basic_get从队列中获取所有消息,而没有自动确认过程,这意味着消息会一直保留在队列中,直到我确认或拒绝消息为止。
有时,由于某些异常,我的消息无法处理,从而导致无法完全处理它们。
问题是,如果我同时成功确认消息并抛出异常,那将有什么关系?我的意思是,结果消息将始终脱离队列,因此,在这种情况下使用ack或nack有什么关系?
也许我错过了每次使用操作时的一些知识?
请您参考如下方法:
basic.nack命令显然是RabbitMQ扩展,它扩展了basic.reject的功能以包括批量处理模式。两者都包含requeue的“位”(即 bool(boolean) 值)标志,因此您实际上有多种选择:
nack / reject和requeue=1:消息将被返回到它来自的队列,就好像它是一条新消息一样;如果使用者方带有
nack和已配置的死信交换(DLX)的
reject / requeue=0,会将消息发布到该交换,从而允许它被另一个队列nack / reject与requeue=0,没有DLX会简单地丢弃消息ack也会从队列中删除消息如果未配置DLX,则始终使用
ack将与
nack /
reject和
requeue=0相同;但是,从一开始就使用逻辑上正确的功能将为您提供更大的灵活性,以便以后进行不同的配置。


