关于RabbitMQ消费者手动ack

以php为例:

$channel->basic_consume 方法的$no_ack参数改成false时才是手动ack,否则不需要手动ack,如果$no_ack没有设置为false时手动ack会报错(例如:

PRECONDITION_FAILED - unknown delivery tag 1

)

$channel->basic_consume 方法的$no_ack参数设置为false以后就可以ack()、nack()和reject()消息了

ack nack reject的区别:

首先ack表示正常消费成功,ack了消息就没有了,没什么好说的

nack有两个参数$requeue 和 $multiple

$requeue 参数默认是false, 如果$requeue设置为true,消息则会马上可用于重新消费(If true, the server will attempt to requeue the message.)

如果$requeue设置为false: 消息则会被丢弃或者推到死信队列(If requeue is false or the requeue attempt fails the messages are discarded or dead-lettered.)

reject 只有一个参数 $requeue 和 nack的不同是默认值是true, 就是reject 的消息默认会被`反复的消费 `,如果一直reject 和死循环差不多,效果和nack(true)几乎是一样的。