Rabbit MQ的消费者拒绝机制有两种:
- 单次拒绝
Channel.basicReject(long deliveryTag, boolean requeue) throws IOException;
其中deliveryTag为消息的编号,它是一个64位的长整型值。requeue参数设置为true,则Rabbit MQ会重新将这条消息存入队列,以便可以发送给下一个订阅的消费者;如果requeue参数设置为false,则Rabbit MQ立即会把消息从队列中移除,而不会发送给新的消费者。
- 批量拒绝
Channel.basicNack(long deliveryTag, boolean multiple, boolean requeue) throws IOException;
deliveryTag和requeue的含义和basicReject一致,multiple参数控制单条拒绝和批量拒绝,如果multiple参数设置为false,则表示拒绝编号为deliveryTag的这一条消息,如果multiple参数设置为true则表示拒绝deliveryTag编号之前所有未被确认的消息。
- 死信队列
将Channel.basicReject或者Channel.basicNack中的requeue设置为false,可以启用“死信队列”的功能,死信队列可以通过检测被拒绝或者未送达的消息来追踪问题。