分布式消息服务RabbitMQ

Rabbitmq消息确认机制

2024-06-27 02:30:22

消息确认

RabbitMQ消息确认机制分为发送消息确认和消息接收确认。

发送消息确认

生产者确认,即为生产者发送消息后,等待服务端确认。

以下示例演示在Java客户端配置生产者确认过程:

try {
       channel.confirmSelect();
       channel . basicPublish( "test_exchange" , " routingKey" , null , "publisher confirm message".getBytes());
       if (!channel.waitForConfirms()) {
              System.out.println( "send message failed") ;
              // do something else
       }else{
              // do something
       }
} catch (InterruptedException e) {
       e.printStackTrace() ;
}

消息接收确认(ACK)

消费者收到消息后需要对 RabbitMQ Server 进行消息ACK确认,RabbitMQ根据确认信息决定是删除队列中的该信息还是重新发送。

重点在于消费者的下面两个方法

channel.basicAck 消费者签收

channel.basicNAck 消费者拒绝签收

以下示例演示在Java客户端配置生产者确认过程:

QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(ConfirmConfig.queueName, false, consumer);
 
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String msg = new String(delivery.getBody());
// do something with msg. 
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);


ZrS8IGqIFknd