消息确认
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);