第十章 高级特性-RabbitMQ消息可靠性投递+消费


第1集 高级知识点之RabbitMQ消息可靠性投递讲解

简介:Rabbitmq的消息可靠性投递讲解

  • 什么是消息的可靠性投递

    • 保证消息百分百发送到消息队列中去

    • 详细

      • 保证mq节点成功接受消息
      • 消息发送端需要接受到mq服务端接受到消息的确认应答
      • 完善的消息补偿机制,发送失败的消息可以再感知并二次处理

    image-20210115173812326

  • RabbitMQ消息投递路径

    • 生产者-->交换机->队列->消费者

    • 通过两个的点控制消息的可靠性投递

      • 生产者到交换机

        • 通过confirmCallback
      • 交换机到队列

        • 通过returnCallback
  • 建议

    • 开启消息确认机制以后,保证了消息的准确送达,但由于频繁的确认交互, rabbitmq 整体效率变低,吞吐量下降严重,不是非常重要的消息真心不建议用消息确认机制

image-20210107185756079

第2集 新版RabbitMQ消息可靠性投递confirmCallback实战

简介:Rabbitmq的消息可靠性投递confirmCallback实战

  • 生产者到交换机

    • 通过confirmCallback
    • 生产者投递消息后,如果Broker收到消息后,会给生产者一个ACK。生产者通过ACK,可以确认这条消息是否正常发送到Broker,这种方式是消息可靠性投递的核心
  • 开启confirmCallback

         
    xxxxxxxxxx
           
    #旧版,确认消息发送成功,通过实现ConfirmCallBack接口,消息发送到交换器Exchange后触发回调
    spring.rabbitmq.publisher-confirms=true
    #新版,NONE值是禁用发布确认模式,是默认值,CORRELATED值是发布消息成功到交换器后会触发回调方法
    spring.rabbitmq.publisher-confirm-type: correlated
       
  • 开发实战

         
    xxxxxxxxxx
           
    @Autowired
      private RabbitTemplate template;
    ?
      @Test
      void testConfirmCallback() {
    ?
        template.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
          /**
           *
           * @param correlationData 配置
           * @param ack 交换机是否收到消息,true是成功,false是失败
           * @param cause 失败的原因
           */
          @Override
          public void confirm(CorrelationData correlationData, boolean ack, String cause) {
            System.out.println("confirm=====>");
            System.out.println("confirm==== ack="+ack);
            System.out.println("confirm==== cause="+cause);
    ?
            //根据ACK状态做对应的消息更新操作 TODO
          }
        });
        template.convertAndSend(RabbitMQConfig.EXCHANGE_NAME+,"order.new","新订单来啦1");
      }
       
  • 模拟异常:修改投递的交换机名称

    未完待续!!!(明天更新)

相关