RabbitMQ消息确认

本文介绍了RabbitMQ的消息确认机制,包括生产者和消费者如何处理消息确认。通过配置`publisher-confirm-type`和`publisher-returns`确保消息可靠投递。生产者设置确认回调,监听消息是否成功发送,消费者使用手动确认模式`MANUAL`来确认消息已被正确处理。
摘要由CSDN通过智能技术生成

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);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值