RabbitMQ消息中間件總結一

 

 

RabbitMQ是採用Erland語言實現AMQP(Advance Message Queuing Protrol,高級消息隊列)的消息中間件。RabbitMQ是一個生產者和消費者模型,主要負責接收,存儲和轉發消息。傳遞過程相似於你將一個包裹送到郵局,郵局會暫存並最終將郵件經過快遞員送到接受人的手上,RabbitMQ就相似於郵局、郵箱、郵遞員組成的一個系統。json

1.消息中間件是什麼緩存

消息:應用之間傳送的數據(文本/json等)安全

消息中間件:message queue Middleware簡稱MQ。指利用高效可靠的消息傳遞機制進行平臺無關的數據交流,並基於數據通訊來進行分佈式的集成。經過提供消息傳遞和消息排隊模型。實現進程間的通訊服務器

消息隊列中間:可稱爲消息隊列或者消息中間件,傳遞方式分爲兩種點對點(P2P,Point-to-Potint)模式和發佈訂閱(Pub/Sub)模式異步

P2P:分佈式

  1. 點對點模式基於隊列
  2. 發送者發送消息到隊列,消費者從隊列中接收消息
  3. 能夠異步傳輸

Pub/Sub:性能

  1. 定義內容節點發布和訂閱消息,這個內容節點稱爲主題,主題能夠看做消息傳遞的中介,
  2. 發佈者將消息發送到主題,訂閱者從主題中訂閱消息,從而使訂閱和發佈相互獨立,用於一對多廣播

2.做用ui

  •  解耦
  • 冗餘(存儲)
  • 擴展
  • 消峯
  • 可恢復性
  • 順序
  • 緩存
  • 異步

2.生產者、消費者、Broker線程

生產者:producer,即投遞消息的一方,生成着建立消息,而後發佈到RabbitMQ中,通常包含兩部分:消息體(Payload)和標籤(Label)中間件

  消息體:通常就是帶有業務邏輯的數據好比json

  標籤:設置的路由規則,將消息發送給RabbitMQ後,RabbitMQ會根據標籤發送給對應的消費者,在消息存入隊列中時,消息的標籤會丟失,存到隊列中的只有消息體

消費者:consumer,接收消息的一方。消費者鏈接到RabbitMQ服務器上並訂閱到隊列上。

隊列:queue,RabbitMQ中的對象,用於存儲消息,且RabbitMQ的消息只能存儲到隊列中

消息中間件的服務節點:Broker。RabbitMQ的一個服務節點或者RabbitMQ服務實例。

  1. 發送消費流程:

  

 

 

 

 

具體流程:

 

生產者

1.鏈接RabbitMQ Broker,創建一個鏈接,開啓通道

2.生產者交換器和隊列並設置相關屬性

3.將交換器和隊列進行綁定

4.生產者發送消息給RabbitMQ Broker

5.交換器根據路由查找相對應的隊列

6.找到則存入隊列,沒有找到根據生產者的配置屬性選擇丟棄仍是會退給生產者

7.關閉信道

8.關閉鏈接

消費者

1.鏈接到RabbitMQ,建議一個鏈接和信道

2.發送請求消費相對應的隊列中的消息

3.等待Broker的迴應,接收消息

4.消費者確認接收到消息

5.RabbitMQ從隊列中刪除相應的確認消息

6.關閉信道

7.關閉鏈接

交換器,路由鍵、綁定

交換器:RabbitMQ中的實體,生產者先把消息傳輸給交換器,由交換器把消息發送給一個或者多個隊列。交換器類型分爲四種:

1.fanout,交換器將消息發送給與交換器綁定的隊列和其餘交換器

2.direct:交換器徹底按照路由規則進行匹配發送給相對應的隊列或交換器

3.topic:direct的升級,進行模糊匹配

4.header:不依賴於交換器和隊列幾乎不使用該類型

路由鍵

 

RoutingKey:路由鍵,生產者發送消息到交換器通常指定RoutingKey,用戶消息的路由,而這個RoutingKey須要與交換器和綁定鍵(Bindingkey)聯合使用有效。聯合使用即路由規則,決定消息流向哪裏

Binding:綁定,將交換器和隊列管理起來,在綁定的時候通常會指定一個綁定鍵(Bindingkey)

 

Connection/Channel

 與RabbitMQ Broker創建鏈接,實則創建了一條TCP鏈接,也就是Connection,鏈接創建好了,就能夠建立AMQP信道(Channel),每一個信道都會被指派一個惟一的ID,信道創建在Connection上的虛擬鏈接,RabbitMQ處理的每條AMQP指定都是經過信道完成的。

  引入信道的緣由:建立一個TCP鏈接開啓昂貴,在使用高峯時出現性能瓶頸,隨即RabbitMQ採用NIO(Non-Blocking I/0)的作法,選擇TCP鏈接複用,這樣不只減小開銷,也方便管理。因爲信道是非現場安全的,全部每一個線程都應把持一個惟一的信道,從而複用Connection的TCP鏈接

相關文章
相關標籤/搜索