Active MQ(一)--訊息佇列基本概念介紹
1.概要
本系列將介紹Active MQ 的原理以及實現,在學習之前,先了解一些基本概念。
1.1.什麼是訊息佇列
訊息佇列(Message queue)是在訊息的傳輸過程中儲存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充當中間人。佇列的主要目的是提供路由並保證訊息的傳遞;如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它。—百度百科
1.2.MQ的通訊模式
1) 點對點通訊:點對點方式是最為傳統和常見的通訊方式,它支援一對一、一對多、多對多、多對一等多種配置方式,支援樹狀、網狀等多種拓撲結構。
2) 多點廣播:MQ適用於不同型別的應用。其中重要的,也是正在發展中的是”多點廣播”應用,即能夠將訊息傳送到多個目標站點(Destination List)。可以使用一條MQ指令將單一訊息傳送到多個目標站點,並確保為每一站點可靠地提供資訊。MQ不僅提供了多點廣播的功能,而且還擁有智慧訊息分發功能,在將一條訊息傳送到同一系統上的多個使用者時,MQ將訊息的一個複製版本和該系統上接收者的名單傳送到目標MQ系統。目標MQ系統在本地複製這些訊息,並將它們傳送到名單上的佇列,從而儘可能減少網路的傳輸量。
3) 釋出/訂閱(Publish/Subscribe)模式:釋出/訂閱功能使訊息的分發可以突破目的佇列地理指向的限制,使訊息按照特定的主題甚至內容進行分發,使用者或應用程式可以根據主題或內容接收到所需要的訊息。釋出/訂閱功能使得傳送者和接收者之間的耦合關係變得更為鬆散,傳送者不必關心接收者的目的地址,而接收者也不必關心訊息的傳送地址,而只是根據訊息的主題進行訊息的收發。在MQ家族產品中,MQ Event Broker是專門用於使用釋出/訂閱技術進行資料通訊的產品,它支援基於佇列和直接基於TCP/IP兩種方式的釋出和訂閱。
4) 群集(Cluster):為了簡化點對點通訊模式中的系統配置,MQ提供Cluster(群集)的解決方案。群集類似於一個域(Domain),群集內部的佇列管理器之間通訊時,不需要兩兩之間建立訊息通道,而是採用群集(Cluster)通道與其它成員通訊,從而大大簡化了系統配置。此外,群集中的佇列管理器之間能夠自動進行負載均衡,當某一佇列管理器出現故障時,其它佇列管理器可以接管它的工作,從而大大提高系統的高可靠性。
1.3.訊息中介軟體有很多的用途和優點
- 將資料從一個應用程式傳送到另一個應用程式,或者從軟體的一個模組傳送到另外一個模組;
- 負責建立網路通訊的通道,進行資料的可靠傳送。
- 保證資料不重發,不丟失
- 能夠實現跨平臺操作,能夠為不同作業系統上的軟體整合技工資料傳送服務
1.4.java中的訊息服務
訊息佇列的實現原理以及規範大都類似,下面介紹下jms的規範。
JMS,它是J2EE的13個規範之一,提供的是訊息中介軟體的規範。
JMS包括以下基本構件:
連線工廠,是客戶用來建立連線的物件,ActiveMQ提供的是ActiveMQConnectionFactory;
連線connection;
會話session,是傳送和接收訊息的上下文,用於建立訊息生產者,訊息消費者,相比rocketMQ會話session是提供事務性的;
目的地destination,指定生產訊息的目的地和消費訊息的來源物件;
生產者、消費者,由會話建立的物件,顧名思義。
訊息通訊機制
點對點模式,每個訊息只有1個消費者,它的目的地稱為queue佇列;
釋出/訂閱模式,每個訊息可以有多個消費者,而且訂閱一個主題的消費者,只能消費自它訂閱之後釋出的訊息。
訊息確認機制
Session.AUTO_ACKNOWLEDGE,直接使用receive方法。
Session.CLIENT_ACKNOWLEDGE,通過訊息的acknowledge 方法確認訊息。
Session.DUPS_ACKNOWLEDGE,該選擇只是會話遲鈍第確認訊息的提交。如果JMS provider 失敗,那麼可能會導致一些重複的訊息。如果是重複的訊息,那麼JMS provider 必須把訊息頭的JMSRedelivered 欄位設定為true。
JMS定義了五種不同的訊息正文格式,以及呼叫的訊息型別,允許你傳送並接收以一些不同形式的資料,提供現有訊息格式的一些級別的相容性。
· StreamMessage – Java原始值的資料流
· MapMessage–一套名稱-值對
· TextMessage–一個字串物件
· ObjectMessage–一個序列化的 Java物件
· BytesMessage–一個未解釋位元組的資料流
1.5.訊息佇列對比
目前有很多的訊息佇列,下面是對比圖