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-CSDN博客