消息隊列MQ的特點及API

        消息隊列技術是分佈式應用間交換信息的一種技術。消息隊列可駐留在內存或磁盤上,隊列存儲消息直到它們被應用程序讀走。通過消息隊列,應用程序可獨立地執行--它們不需要知道彼此的位置、或在繼續執行前不需要等待接收程序接收此消息。

消息隊列的特點:

  • 異步 --- 消息隊列本身是異步的,它允許接收者在消息發送很長時間後再取回消息,這和大多數通信協議是不同的。
  • 解耦 --- 消息隊列減少了服務之間的耦合性,不同的服務可以通過消息隊列進行通信,而不用關心彼此的實現細節,只要定義好消息的格式就行。
  • 廣播 --- 消息隊列的基本功能之一是進行廣播。如果沒有消息隊列,每當一個新的業務方接入,我們都要聯調一次新接口。
  • 流量削峯與流控 --- 當上下游系統處理能力存在差距的時候,利用消息隊列做一個通用的”載體”。在下游有能力處理的時候,再進行分發與處理。

MQ的基本概念:

1) 隊列管理器

        隊列管理器是MQ系統中最上層的一個概念,由它爲我們提供基於隊列的消息服務。

2) 消息 --- 消息體(MessageBody),即用戶數據部分。

        在MQ中,消息分爲兩種類型,非永久性(non-persistent)消息和永久性(persistent)

  1. 非永久性消息是存儲在內存中的,它是爲了提高性能而設計的,當系統掉電或MQ隊列管理器重新啓動時,將不可恢復。當用戶對消息的可靠性要求不高,而側重系統的性能表現時,可以採用該種類型的消息,如:當發佈股票信息時,由於股票信息是不斷更新的,我們可能每若干秒就會發布一次,新的消息會不斷覆蓋舊的消息。
  2. 永久性消息是存儲在硬盤上,並且紀錄數據日誌的,它具有高可靠性,在網絡和系統發生故障等情況下都能確保消息不丟、不重。

        此外,在MQ中,還有邏輯消息和物理消息的概念。利用邏輯消息和物理消息,我們可以將大消息進行分段處理,也可以將若干個本身完整的消息在應用邏輯上歸爲一組進行處理。

3) 隊列

        在MQ中,隊列分爲很多種類型,其中包括:本地隊列、遠程隊列、模板隊列、動態隊列、別名隊列等。

  • 本地隊列又分爲普通本地隊列和傳輸隊列,普通本地隊列是應用程序通過API對其進行讀寫操作的隊列;傳輸隊列可以理解爲存儲-轉發隊列,比如:我們將某個消息交給MQ系統發送到遠程主機,而此時網絡發生故障,MQ將把消息放在傳輸隊列中暫存,當網絡恢復時,再發往遠端目的地。
  • 遠程隊列是目的隊列在本地的定義,它類似一個地址指針,指向遠程主機上的某個目的隊列,它僅僅是個定義,不真正佔用磁盤存儲空間。
  • 模板隊列和動態隊列是MQ的一個特色,它的一個典型用途是用作系統的可擴展性考慮。我們可以創建一個模板隊列,當今後需要新增隊列時,每打開一個模板隊列,MQ便會自動生成一個動態隊列,我們還可以指定該動態隊列爲臨時隊列或者是永久隊列,若爲臨時隊列我們可以在關閉它的同時將它刪除,相反,若爲永久隊列,我們可以將它永久保留,爲我所用。

4) 通道

        通道是MQ系統中隊列管理器之間傳遞消息的管道,它是建立在物理的網絡連接之上的一個邏輯概念,也是MQ產品的精華。

        在MQ中,主要有三大類通道類型,即消息通道,MQI通道和Cluster通道:

  • 消息通道是用於在MQ的服務器和服務器之間傳輸消息的,需要強調指出的是,該通道是單向的,它又有發送(sender),接收(receive), 請求者(requestor), 服務者(server)等不同類型,供用戶在不同情況下使用。
  • MQI通道是MQClient和MQI通道是MQ Client和MQServer之間通訊和傳輸消息用的,與消息通道不同,它的傳輸是雙向的。
  • 羣集(Cluster)通道是位於同一個MQ羣集內部的隊列管理器之間通訊使用的。
     

MQ的工作原理

在發送方A:

1) 建立隊列管理器QMA: crtmqm -q QMA

2) 定義本地傳輸隊列: define qlocal (QMB) usage (xmitq) defpsist(yes)

3) 創建遠程隊列: define qremote (QR.TOB) rname (LQB) rqmname (QMB) xmitq(QMB)

4) 定義發送通道: define channel (A.TO.B) chltype (sdr) conname ('IP ofB') xmitq (QMB) + trptype (tcp)

在接收方B:

1) 建立隊列管理器QMB: crtmqm -q QMB

2) 定義本地隊列QLB: define qlocal (LQB)

3) 創建接收通道: define channel (A.TO.B) chltype (rcvr) trptype(tcp)

經過上述配置,我們就可以實現從主機A到B的單向通訊,若要實現二者之間的雙向通訊,可參考此例創建所需要的MQ對象。

MQ的通訊模式
1)點對點通訊:點對點方式是最爲傳統和常見的通訊方式,它支持一對一、一對多、多對多、多對一等多種配置方式,支持樹狀、網狀等多種拓撲結構。

2)多點廣播:MQ適用於不同類型的應用。其中重要的,也是正在發展中的是"多點廣播"應用,即能夠將消息發送到多個目標站點(DestinationList)。可以使用一條MQ指令將單一消息發送到多個目標站點,並確保爲每一站點可靠地提供信息。MQ不僅提供了多點廣播的功能,而且還擁有智能消息分發功能,在將一條消息發送到同一系統上的多個用戶時,MQ將消息的一個複製版本和該系統上接收者的名單發送到目標MQ系統。目標MQ系統在本地複製這些消息,並將它們發送到名單上的隊列,從而儘可能減少網絡的傳輸量。

3)發佈/訂閱(Publish/Subscribe)模式:發佈/訂閱功能使消息的分發可以突破目的隊列地理指向的限制,使消息按照特定的主題甚至內容進行分發,用戶或應用程序可以根據主題或內容接收到所需要的消息。發佈/訂閱功能使得發送者和接收者之間的耦合關係變得更爲鬆散,發送者不必關心接收者的目的地址,而接收者也不必關心消息的發送地址,而只是根據消息的主題進行消息的收發。在MQ家族產品中,MQEventBroker是專門用於使用發佈/訂閱技術進行數據通訊的產品,它支持基於隊列和直接基於TCP/IP兩種方式的發佈和訂閱。

4)羣集(Cluster):爲了簡化點對點通訊模式中的系統配置,MQ提供Cluster(羣集)的解決方案。羣集類似於一個域(Domain),羣集內部的隊列管理器之間通訊時,不需要兩兩之間建立消息通道,而是採用羣集(Cluster)通道與其它成員通訊,從而大大簡化了系統配置。此外,羣集中的隊列管理器之間能夠自動進行負載均衡,當某一隊列管理器出現故障時,其它隊列管理器可以接管它的工作,從而大大提高系統的高可靠性。

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