RabbitMQ消息的确认模式

确认模式

包括两种自动确认、手动确认

自动确认
只要消息从队列中获取,无论消费者获取到消息后,
是否执行成功,都认为是消息已经成功消费。

手动确认
消费者从队列中获取消息后,服务器会将该消息标记为不可用状态
等待消费者的反馈,如果消费者一直没有反馈
那么该消息将一直处于不可用状态。

自动确认

// 监听队列
channel.basicConsume(QUEUE_NAME, true, consumer);

// 获取消息
while (true) {
    QueueingConsumer.Delivery delivery = consumer.nextDelivery();
    String message = new String(delivery.getBody());
    System.out.println(" [x] Received '" + message + "'");
}

true
表示自动确认
不需要返回,只需要获取消息
此时,就认为消息已经成功消费

手动确认

// 监听队列,手动返回完成
channel.basicConsume(QUEUE_NAME, false, consumer);

// 获取消息
while (true) {
    QueueingConsumer.Delivery delivery = consumer.nextDelivery();
    String message = new String(delivery.getBody());
    System.out.println(" [x] Received '" + message + "'");
    //休眠
    Thread.sleep(10);
    // 返回确认状态
    channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}

False
表示手动确认
手动,消息执行完成之后
需要向服务端,返回一个消息的状态

猜你喜欢

转载自blog.csdn.net/nangeali/article/details/81735246