【RabbitMQ】簡介


  RabbitMQ是一個開源的消息代理和隊列服務器,用來通過普通協議在完全不同的應用之間共享數據,RabbitMQ是適用Erlang語言來編寫的,並且RabbitMQ是基於AMQP協議的。

1. 爲什麼選擇RabbitMQ

  1. 開源,性能優秀,穩定性好
  2. 提供可靠的消息投遞模式(confirm)、返回模式(return)
  3. 保證數據不丟失的前提做到高可用性、可靠性
  4. 集羣模式豐富:表達式配置、HA模式、鏡像隊列模式
  5. 與springAMQP完美結合,API豐富

1.1 RabbitMQ高性能的原因

  1. Erlang語言最初用戶交換機領域的架構模式,這樣使得RabbitMQ在Brocker之間進行數據交互的性能非常優秀
  2. Erlang有着和原生socket一樣的延遲

2. AMQP協議

2.1 什麼是AMQP協議

  高級消息隊列協議(Advanced Message Queueing Protocol),是具有現代特徵的二進制協議,是一個是一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開發標準,爲面向消息的中間件設計

2.2 AMQP協議模型


3. RabbitMQ架構圖


4. RabbitMQ消息流轉過程


5. RabbitMQ消息從生產到消費的過程

  1. 生產者,消費者創建連接
  2. 生產者通過channel發送消息到exchange交換機
  3. 交換機通過綁定的routingKey路由到Queue隊列
  4. 消費者從queue取出消息進行消費

6. RabbitMQ 4種交換機Exchange類型

  RabbitMQ交換機一共有4種類型:分別是Direct Exchange、Topic Exchange、Fanout Exchange、Headers Exchange

6.1 Direct Exchange

  所有發送到Direct Exchange的消息被轉發到RouteKey中指定的Queue(Direct模式可以使用RabbitMQ自動的Exchange:Default Exchange,所以不需要將Exchange進行任何綁定bing操作,消息傳遞時,RouteKey必須完全匹配纔會被隊列接收即Exchange和RouteKey名稱一致,否則該消息會被拋棄)

6.2 Topic Exchange

  所有發送到Topic Exchange的消息被轉發到所有關心RouteKey中指定Topic的Queue上。Exchange將RouteKey和某Topic進行模糊匹配,此時隊列需要綁定一個Topic(#:匹配一個或多個單詞;*:匹配一個詞)

6.3 Fanout Exchange

  1. 不處理路由鍵,只需要簡單的將隊列綁定到交換機上
  2. 發送到交換機的消息會被轉發到該交換機綁定的所有隊列上
  3. Fanout交換機轉發消息是最快的

6.4 Headers Exchanges

  不處理路由鍵。而是根據發送的消息內容中的headers屬性進行匹配。在綁定Queue與Exchange時指定一組鍵值對;當消息發送到RabbitMQ時會取到該消息的headers與Exchange綁定時指定的鍵值對進行匹配;如果完全匹配則消息會路由到該隊列,否則不會路由到該隊列。headers屬性是一個鍵值對,可以是Hashtable,鍵值對的值可以是任何類型。而fanout,direct,topic 的路由鍵都需要要字符串形式的(一般不適用此種方法)

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