Rabbitmq消息確認機制
更新時間 2023-07-03 21:29:53
最近更新時間: 2023-07-03 21:29:53
分享文章
介紹 分布式消息服務RabbitMQ消息確認機制。
消息確認
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);