1. 程式人生 > >訊息中介軟體MQ

訊息中介軟體MQ

訊息佇列(Message Queue,簡稱 MQ)是阿里巴巴集團中介軟體技術部自主研發的專業訊息中介軟體。用於保證異構應用之間的訊息傳遞。應用程式通過MQ介面進行互連通訊,可以不必關心網路上的通訊細節,從而將更多的注意力集中於應用本身。

分散式訊息系統作為實現分散式系統可擴充套件、可伸縮性的關鍵元件,需要具有高吞吐量、高可用等特點。

物件

訊息 (Message)佇列 (Queue)佇列管理器(QueueManager)通道 (Channel)監聽器(Listener)關係:佇列管理器是負責嚮應用程式提供訊息服務的機構,我們可以把佇列管理器比作是資料庫,佇列是其中的一張表,訊息表中的一條記錄。

1、訊息(Message)

訊息是 WebSphereMQ中最小的概念,本質上就是一條資料,它能被一個或多個應用程式所理解,是應用程式之間傳遞的資訊載體。

訊息可以大致分成兩部分:應用資料體和訊息資料頭。訊息資料頭是對訊息屬性的描述,這段資訊往往被佇列管理器用來確定對訊息的處理。訊息資料頭可以由應用程式或系統的訊息服務程式共同產生,它包含了訊息在傳送中的必要資訊,如目標佇列管理器的名字,目標佇列的名字,以及訊息的其它一些屬性。

訊息可以分成持久(Persistent)訊息和非持久 (Non-Persistent)訊息。所謂“持久”的意思,就是在 WebSphere MQ 佇列管理器重啟動後,訊息是否仍然能保持。 

2、佇列 (Queue):分本地佇列、遠端佇列、模型佇列

本地佇列按功能可分成初始化佇列,傳輸佇列,目標佇列和死信佇列初始化佇列用做訊息觸發功能。傳輸佇列只是暫存待傳的訊息,條件許可的情況下,通過管道將訊息傳送其它的佇列管理器。目標佇列是訊息的目的地,可以長期存放訊息。如果訊息不能送達目標佇列,也不能再路由出去,則被自動放入死信佇列儲存。遠端佇列用來指定遠端佇列管理器中的佇列。使用了遠端佇列定義,程式就不需要知道目標佇列的位置。模型佇列-定義了一套本地佇列的屬性集合,一旦開啟模型佇列,佇列管理器會按這些屬性動態地創建出一個本地佇列。

3、佇列管理器(QueueManager)

WebSphere

MQ中的佇列管理器可以含有很多個佇列,但一個佇列只能屬於一個佇列管理器。一個作業系統平臺可以建立一個佇列管理器,也可以建立多個佇列管理器。佇列管理器、佇列、通道等等都是WebSphere MQ的物件,所有的物件都有各自的屬性,有些屬性必須在物件建立的時候指定,有些可以在建立以後更改。

4、通道 (Channel)

通道是兩個佇列管理器之間的一種單向的點對點的通訊連線,訊息在通道中只能單向流動。如果需要雙向交流,可以建立一對通道,一來一去。站在佇列管理器的角度,這一對通道可以按訊息的流向分成輸入通道和輸出通道。通過配置,對於放入本地傳輸佇列中的訊息,佇列管理器會自動將其通過輸出通道發出,送入對方的遠端目標佇列。。 

5、監聽器(Listener)

同步接收訊息:同步讀取即主動讀取方式

非同步接收訊息非同步讀取則需要設定Listener,在訊息到達後,自動呼叫ListeneronMessage()方法。

JMS開發

jmsJava訊息服務(JavaMessage Service)應用程式接口,是一個Java平臺中關於面向訊息中介軟體(MOM)API,用於在兩個應用程式之間,或分散式系統中傳送訊息,進行非同步通訊。

JMS 中有一系列的類:ConnectionFactoryConnectionSessionMessageProducerMessageConsumerMessage••JMS 程式設計時,程式首先要找出ConnectionFactory,以此建立Connection,再建立Session,以後所有的操作都以Session 為基礎。找出Queue Queue  (統稱Destination),以此建立QueueSenderQueuePublisher (統稱MessageProducer),在該物件上傳送或釋出訊息。也可以在Destination 基礎上建立QueueReceiver或 QueueSubscriber (統稱MessageConsumer),在該物件上接收或訂閱訊息。