MQ入門簡介

MQ簡介:

MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過寫和檢索出入列隊的針對應用程序的數據(消息)來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。其中較爲成熟的MQ產品有IBMWEBSPHERE MQ。

MQ特點:

MQ的消費-生產者模型的一個典型的代表,一端往消息隊列中不斷的寫入消息,而另一端則可以讀取或者訂閱隊列中的消息。MQ和JMS類似,但不同的是JMS是SUN JAVA消息中間件服務的一個標準和API定義,而MQ則是遵循了AMQP協議的具體實現和產品。

使用場景:

在項目中,將一些無需即時返回且耗時的操作提取出來,進行了異步處理,而這種異步處理的方式大大的節省了服務器的請求響應時間,從而提高了系統的吞吐量。

JMS簡介:

JMS即Java消息服務(Java Message Service)應用程序接口是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通信。Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。

定義:

JMS(Java Messaging Service)是Java平臺上有關面向消息中間件(MOM)的技術規範,它便於消息系統中的Java應用程序進行消息交換,並且通過提供標準的產生、發送、接收消息的接口簡化企業應用的開發,翻譯爲Java消息服務。

簡介:

JMS是一種與廠商無關的 API,用來訪問消息收發系統消息。它類似於JDBC(Java DatabaseConnectivity):這裏,JDBC 是可以用來訪問許多不同關係數據庫的 API,而 JMS 則提供同樣與廠商無關的訪問方法,以訪問消息收發服務。許多廠商目前都支持JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ,這只是幾個例子。 JMS 使您能夠通過消息收發服務(有時稱爲消息中介程序或路由器)從一個 JMS 客戶機向另一個JMS客戶機發送消息。消息是 JMS 中的一種類型對象,由兩部分組成:報頭和消息主體。報頭由路由信息以及有關該消息的元數據組成。消息主體則攜帶着應用程序的數據或有效負載。根據有效負載的類型來劃分,可以將消息分爲幾種類型,它們分別攜帶:簡單文本(TextMessage)、可序列化的對象 (ObjectMessage)、屬性集合 (MapMessage)、字節流 (BytesMessage)、原始值流 (StreamMessage),還有無有效負載的消息 (Message)。

JMS和MQ的關係:

JMS是一個用於提供消息服務的技術規範,它制定了在整個消息服務提供過程中的所有數據結構和交互流程。而MQ則是消息隊列服務,是面向消息中間件(MOM)的最終實現,是真正的服務提供者;MQ的實現可以基於JMS,也可以基於其他規範或標準。

支持JMS的開源MQ:

目前選擇的最多的是ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演着特殊的地位。

主要特點:

1. 多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。應用協議: OpenWire,Stomp REST,WSNotification,XMPP,AMQP

2. 完全支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務)

3. 對Spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統裏面去,而且也支持Spring2.0的特性

4. 通過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上

5. 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

6. 支持通過JDBC和journal提供高速的消息持久化

7. 從設計上保證了高性能的集羣,客戶端-服務器,點對點

8. 支持Ajax

9. 支持與Axis的整合

10. 可以很容易得調用內嵌JMS provider,進行測試

11. ActiveMQ速度非常快;一般要比jbossMQ快10倍。

優點:是一個快速的開源消息組件(框架),支持集羣,同等網絡,自動檢測,TCP,SSL,廣播,持久化,XA,和J2EE1.4容器無縫結合,並且支持輕量級容器和大多數跨語言客戶端上的Java虛擬機。消息異步接受,減少軟件多系統集成的耦合度。消息可靠接收,確保消息在中間件可靠保存,多個消息也可以組成原子事務。

缺點:ActiveMQ默認的配置性能偏低,需要優化配置,但是配置文件複雜,ActiveMQ本身不提供管理工具;示例代碼少;主頁上的文檔看上去比較全面,但是缺乏一種有效的組織方式,文檔只有片段,用戶很難由淺入深進行了解,二、文檔整體的專業性太強。在研究階段可以通過查maillist、看Javadoc、分析源代碼來了解。

ActiveMQ應用場景:

1、 不同語言應用集成

ActiveMQ 中間件用Java語言編寫,因此自然提供Java客戶端 API。但是ActiveMQ 也爲C/C++、.NET、Perl、PHP、Python、Ruby 和一些其它語言提供客戶端。在你考慮如何集成不同平臺不同語言編寫應用的時候,ActiveMQ 擁有巨大優勢。在這樣的例子中,多種客戶端API通過ActiveMQ 發送和接受消息成爲可能,無論使用的是什麼語言。此外,ActiveMQ 還提供交叉語言功能,該功能整合這種功能,無需使用遠程過程調用(RPC)確實是個優勢,因爲消息協助應用解耦。

2、 作爲RPC的替代

使用RPC同步調用的應用十分普遍。假設大多數客戶端服務器應用使用RPC,包括ATM、大多數WEB應用、信用卡系統、銷售點系統等等。儘管很多系統很成功,但是轉換使用異步消息可以帶來很多好處,而且也不會放棄響應保證。使用同步請求的系統在規模上有較大的限制,因爲請求會被阻塞,從而導致整個系統變慢。如果使用異步消息替代,可以很容易增加額外的消息接收者,使得消息能被併發消耗,從而加快請求處理。當然,你的系統應用間應該是解耦的。

3、 應用之間解耦

正如之前討論的,緊耦合架構可以導致很多問題,尤其是如果他們是分佈的。鬆耦合架構,在另一方面,證實了更少的依賴性,能夠更好地處理不可預見的改變。不僅可以在系統中改變組件而不影響整個系統,而且組件交互也相當的簡單。相比使用同步的系統(調用者必須等待被調用者返回信息),異步系統(調用方發送消息後就不管,即fire-and-forget)能夠給我們帶來事件驅動架構(event-driven architecture EDA)。

4、 作爲事件驅動架構的主幹

解耦,異步架構的系統允許通過代理器自己配置更多的客戶端,內存等(即vertical scalability)來擴大系統,而不是增加更多的代理器(即horizontal scalability)。考慮如亞馬遜這樣繁忙的電子商務系統。當用戶購買物品,事實上系統需要很多步驟去處理,包括下單,創建發票,付款,執行訂單,運輸等。但是用戶下單後,會立即返回“謝謝你下單”的界面。不只是沒有延遲,而且用戶還會受到一封郵件表明訂單已經收到。在亞馬遜下單的例子就是一個多步處理的例子。每一步都由單獨的服務去處理。當用戶下單是,有一個同步的體積表單動作,但整個處理流程並不通過瀏覽器同步處理。相反地,訂單馬上被接受和反饋。而剩下的步驟就通過異步處理。如果在處理過程中出錯,用戶會通過郵件收到通知。這樣的異步處理能提供高負載和高可用性。

5、 提高系統擴展性

很多使用事件驅動設計的系統是爲了獲得高可擴展性,例如電子商務,政府,製造業,線上遊戲等。通過異步消息分開商業處理步驟給各個應用,能夠帶來很多可能性。考慮設計一個應用來完成一項特殊的任務。這就是面向服務的架構(service-oriented architecture SOA)。每一個服務完成一個功能並且只有一個功能。應用就通過服務組合起來,服務間使用異步消息和最終一致性。這樣的設計便可以引入一個複雜事件處理概念(complex event processing CEP)。使用CEP,部件間的交互可以被記錄追蹤。在異步消息系統中,可以很容易在部件間增加一層處理。

其他開源JMS供應商;

jbossmq(jboss 4)

jboss messaging (jboss 5)

joram-4.3.21 2006-09-22

openjms-0.7.7-alpha-3.zipDecember 26,2005

mantamq

ubermq

SomnifugiJMS 2005-7-27

開源的JMSProvider大部分都已經停止發展了,剩下的幾個都是找到了東家,和某種J2EE 服務器掛鉤,比如jbossmq 與jboss,joram與jonas(objectweb組織),ActiveMQ 與Geronimo(ASF APACHE基金組織),而在這3個之間,從網絡底層來看,只有ActiveMQ使用了NIO,單從這個角度來看ActiveMQ在性能上會有一定的優勢
發佈了90 篇原創文章 · 獲贊 19 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章