RabbitMQ基礎總結

RabbitMQ的好處

服務解耦,流量削峯,異步調用.

AMQP核心概念

  • Server又稱Broker,接收客戶端連接,實現AMQP實體服務.
  • Connection連接,應用程序與Broker的網絡連接.
  • Channel網絡信道,進行消息讀寫的通道.客戶端可以建立多個Channel,每個Channel代表一個會話任務.
  • Message消息,由Properties和Body組成,Properties可以對消息進行修飾,比如消息的優先級,延遲等.Body則就是消息體內容.
  • Virtual host虛擬地址,用於進行邏輯隔離,最上層的消息路由.一個Virtual Host裏面可以有若干個Exchange和Queue,同一個Virtual Host裏面不可以有相同名稱的Exchange或Queue.
  • Exchange交換機,接收消息,根據路由鍵轉發消息到綁定的隊列.
  • Binding綁定,Exchange和Queue之間的虛擬連接,binding中可以包含routing key.
  • Routing key路由鍵,一個路由規則,虛擬機可用它來確定如何路由一個特定消息.
  • Queue也稱Message Queue,保存消息並將它們轉發給消費者.

Exchange交換機的類型

  • direct直連交換機.RabbitMQ默認的交換機類型,所有發送到直連交換機的消息都會按RouteKey發送到匹配(完全匹配)的隊列中.
  • topic主題交換機,所有發送到主題交換機的消息會被轉發到所有關心RouteKey中指定Topic的Queue上.交換機將RouteKey和某Topic進行模糊匹配.隊列需要綁定一個Topic(#代表匹配一個或多個詞,*匹配不多不少一個詞).
  • fanout扇出交換機.不處理路由鍵,只需要簡單的將隊列綁定到交換機上.轉發消息性能好.消息會被轉發到所有與扇出交換機綁定的隊列上.
  • headers頭交換機,根據消息頭轉發.

如何保證消息的100%投遞成功

生產端的可靠性投遞:

  • 保障消息的成功發出.
  • 保障MQ節點的成功接收.
  • 發送端收到MQ節點(Broker)確認應答.
  • 完善的消息進行補償機制.

解決方案:

消息的延遲投遞,做二次確認,回調檢查.

如何避免消息的重複消費問題

消費端的冪等性保障(避免重複消費):

  • 唯一ID+指紋碼 機制,利用數據庫主鍵去重.缺點:高併發下有數據庫寫入的性能瓶頸.解決方法:跟進ID進行分庫分表進行算法路由.
  • 利用Redis的原子性去實現.

RabbitMQ常用的消息投遞方式:Confirm確認消息,Return返回消息.

消息的ACK與重回隊列,略.

消息的限流

RabbitMQ的消費端限流:BasicQos方法,非自動確認消息的前提下,如果一定數目的消息未被確認,則不進行消費新的消息.

TTL消息

可以設置消息的過期時間,或者給隊列添加過期時間.從消息入列開始,只要超時,就會清除消息.

死信隊列

利用死信隊列,當消息在一個隊列中變成死信之後,它能被重寫publish到另一個Exchange,這個Exchange就是DLX(死信交換機/死信隊列).

消息變成死信的幾種情況:消息被拒絕.消息TTL過期.隊列達到最大長度.

RabbitMQ集羣架構模式

主備模式:又叫Warren,就是一個主備方案.主節點如果掛了,從節點頂上.

遠程模式:遠程模式可以實現雙活,簡稱Shovel模式,就是讓我們可以把消息進行不同數據中心的複製工作,我們可以跨地域的讓倆個mq集羣互聯.

鏡像模式:也稱爲Mirror模式,可以保證100%數據不丟失,應用簡單,使用廣泛.鏡像隊列(屬於100%數據可靠性解決方案一般是3節點).

多活模式:這種模式是實現異地數據複製的主流模式,因爲遠程模式配置比較複雜,所以一般實現異地集羣都是使用這種雙活或者多活模型來去實現的.這種模式需要依賴RabbitMQ的federation插件,可以實現持續的可靠的AMQP數據通信,多活模式在實際配置與應用上非常簡單.採用雙中心或者多中心結構.

SET化架構

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章