MQ消息中間件使用總結

使用MQ來處理大併發情況下數據庫操作頻繁帶來 的性能問題。

在業務執行時,不直接操作數據庫,而是將數據通過MQ 傳輸,再MQ再調用自身的服務 操作數據庫。MQ消息屬隊列,MQ包括消息發送方與消息接收方。

RabbitMQ 是由 LShift 提供的一個 Advanced Message Queuing Protocol (AMQP) 的開源實現,由以高性能、健壯以及可伸縮性出名的 Erlang 寫成,因此也是繼承了這些優點。

 AMQP 裏主要要說兩個組件:Exchange 和 Queue (在 AMQP 1.0 裏還會有變動),如下圖所示,綠色的 X 就是 Exchange ,紅色的是 Queue ,這兩者都在 Server 端,又稱作 Broker ,這部分是 RabbitMQ 實現的,而藍色的則是客戶端,通常有 Producer 和 Consumer 兩種類型:
AMQ消息隊列


基礎概念
AMQP 有四個非常重要的概念:虛擬機(virtual host),交換機(exchange),隊列(queue)和綁定(binding)。
虛擬機: 通常是應用的外在邊界,我們可以爲不同的虛擬機分配訪問權限。虛擬機可持有多個交換機、隊列和綁定。
交換機: 從連接通道(Channel)接收消息,並按照特定的路由規則發送給隊列。
隊列: 消息最終的存儲容器,直到消費客戶端(Consumer)將其取走。
綁定: 也就是所謂的路由規則,告訴交換機將何種類型的消息發送到某個隊列中。
通常的操作流程是:
(1) 消費者: 創建信息通道。
(2) 消費者: 定義消息隊列。
(3) 消費者: 定義特定類型的交換機。
(4) 消費者: 設定綁定規則 (包括交換機名稱、隊列名稱以及路由鍵)。
(5) 消費者: 等待消息。
(6) 生產者: 創建消息。
(7) 生產者: 將消息投遞給信息通道 (註明接收交換機名稱和路由鍵)。
(8) 交換機: 獲取消息,依據交換機類型決定是否匹配路由規則 (如需匹配,則對比消息路由鍵和綁定路由鍵)。
(9) 消費者: 獲取並處理消息,發送反饋。
(10) 結束: 關閉通道和連接。

mq有4種不同的交換機類型:

直連交換機:Direct exchange
扇形交換機:Fanout exchange

主題交換機:Topic exchange

首部交換機:Headers exchange 

具體可參考博文:https://www.jianshu.com/p/469f4608ce5d

這篇博客中談到了每種交換機與routingKey的對應關係。

知道什麼是routingKey嗎?

我在項目中用了spring-amqp的包,整個amqp被封裝了一層,頂層是看不到諸如消息通道channel、rountingKey的,這些都被封裝了。通過跟蹤源碼發現,實際我們定義的隊列名queueName被當做routingKey來使用。

我們把定義的交換機與隊列進行綁定,實際上就是交換機與routingKey進行綁定。

整個消息流轉的流程是基於routingKey來進行的。




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