在上节学习了消费者获取消息的策略
那么当消费者获取到消息后,发现消息不应该由自己解决,或者处理时发生异常
应该怎么处理呢?这就是本节学习的消息拒绝
一、消息拒绝
消息拒绝也有两种方式:Reject 和 Nack
Reject一次只能拒绝一条消息,而Nack则可以一次性拒绝多条消息
并且无论哪种方式,都可以使用requeue 标识
如果是 requeue=false,则被拒绝的消息不重新发送,一般这个消息就会被 RabbitMQ 丢弃
如果是 requeue=true,则被拒绝的消息可以重新投递
//Reject方式拒绝(这里第2个参数决定是否重新投递)
channel.basicReject(envelope.getDeliveryTag(),true);
//Nack方式的拒绝(第2个参数决定是否批量)
channel.basicNack(envelope.getDeliveryTag(), false, false);
完整的消费者demo
public class RejectRequeuConsumer {
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
Connection connection = factory.newConnection();
final Channel channel = co