1. 程式人生 > 其它 >第十章 高階特性-RabbitMQ訊息可靠性投遞+消費

第十章 高階特性-RabbitMQ訊息可靠性投遞+消費

第1集 高階知識點之RabbitMQ訊息可靠性投遞講解

簡介:Rabbitmq的訊息可靠性投遞講解

  • 什麼是訊息的可靠性投遞

    • 保證訊息百分百發送到訊息佇列中去

    • 詳細

      • 保證mq節點成功接受訊息
      • 訊息傳送端需要接受到mq服務端接受到訊息的確認應答
      • 完善的訊息補償機制,傳送失敗的訊息可以再感知並二次處理
  • RabbitMQ訊息投遞路徑

    • 生產者-->交換機->佇列->消費者

    • 通過兩個的點控制訊息的可靠性投遞

      • 生產者到交換機

        • 通過confirmCallback
      • 交換機到佇列

        • 通過returnCallback
  • 建議

    • 開啟訊息確認機制以後,保證了訊息的準確送達,但由於頻繁的確認互動, rabbitmq 整體效率變低,吞吐量下降嚴重,不是非常重要的訊息真心不建議用訊息確認機制

第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");
      }
  • 模擬異常:修改投遞的交換機名稱

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