no_ack参数代表后续是否需要发送Basic.Ack(代码中调用amqp_basic_ack)。
如果no_ack为true,那么后续不会发送Basic.Ack(调用amqp_basic_ack),mq服务在收到tcp的ack后,即可删除消息队列,不保证消息是否处理成功。
如果no_ack为false,那么后续需要发送Basic.Ack(调用amqp_basic_ack),mq服务在收到Basic.Ack才会删除队列消息,保证消息处理成功。
如果 no_ack为true,同时发送Basic.Ack(调用amqp_basic_ack),会出PRECONDITION_FAILED - unknown delivery tag 1的错误
参照:【原创】RabbitMQ 之 no_ack 分析-阿里云开发者社区 (aliyun.com)
(406, 'PRECONDITION_FAILED - unknown delivery tag 1') Rabbitmq-优快云博客
本文讨论了RabbitMQ中的no_ack参数对消息确认的影响。当no_ack设置为true时,消息队列会在接收到TCPACK后自动删除,但不保证消息处理;若设置为false,则需要手动发送Basic.Ack以确保消息成功处理,否则可能导致预设条件失败错误。
900

被折叠的 条评论
为什么被折叠?



