Message Confirm
The RabbitMQ message ack mechanism is divided into message sending ack and message receiving ack.
Message Sending Ack
Producer ack, that is, the producer sends the message and waits for the server to acknowledge.
The following example demonstrates configuring the producer ack process on the Java client:
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() ;
}
Message Receiving Ack
After receiving the message, consumer needs to acknowledge with the RabbitMQ Server, RabbitMQ decides whether to delete the message from the queue or resend it based on the acknowledgment.
The focus is on the following two methods for consumers
channel.basicAck Consumer signs for acceptance
channel.basicNAck Consumer refuses to sign for acceptance
The following example demonstrates configuring the producer ack process on the Java client:
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);