RabbitMQ消息确认
消息确认机制
- 消息确认机制
- 消息的确认,是生产者投递消息后,如果Borker接收到消息,则会给我们生产者一个应答
- 生产者进行接收应答,用来确定这条消息是否正常的发送到Broker,这种方式也是消息的可靠性投递的核心保障
消息确认使用
spring:
rabbitmq:
publisher-confirm-type: CORRELATED
publisher-returns: true
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
if (ack) {
System.out.println("消息确认:" + correlationData.getId());
try {
System.out.println("返回消息体" + new String(correlationData.getReturnedMessage().getBody(), "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
});
CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString() + "_" + System.currentTimeMillis());
correlationData.setReturnedMessage(new Message("RETURN MESSAGE".getBytes(),null));
rabbitTemplate.convertAndSend(RabbitMQConstants.DIRECT_EXCHANGE, RabbitMQConstants.QUEUE_ROUTING_KEY, message,correlationData);
@RabbitListener(queues = RabbitMQConstants.QUEUE,ackMode = "MANUAL")
public void queue1(Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag, String message) throws IOException {
channel.basicAck(deliveryTag,false);
System.err.println("com.free.fly.rabbitmq.boot.listeners.RabbitMQListener.queue1 -> " + message);
}