JMS、MQ、ActiveMQ

JMS 的一個標準或者說是一個協議.  一般用於企業級應用的消息傳遞. 主要有topic 消息(1 對多), queue 消息(1對1).
ActiveMQ 是一個JMS 的實現, apache 出的. 
另外還其它的實現 jboss 等

MQ簡介:web

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

MQ特色:apache

  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自己不提供管理工具;示例代碼少;主頁上的文檔看上去比較全面,可是缺少一種有效的組織方式,文檔只有片斷,用戶很難由淺入深進行了解,2、文檔總體的專業性太強。在研究階段能夠經過查maillist、看Javadoc、分析源代碼來了解。

ActiveMQ應用場景:

一、 不一樣語言應用集成

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

二、 做爲RPC的替代

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

三、 應用之間解耦

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

四、 做爲事件驅動架構的主幹

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

五、 提升系統擴展性

  不少使用事件驅動設計的系統是爲了得到高可擴展性,例如電子商務,政府,製造業,線上遊戲等。經過異步消息分開商業處理步驟給各個應用,可以帶來不少可能性。考慮設計一個應用來完成一項特殊的任務。這就是面向服務的架構(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在性能上會有必定的優點。

相關文章
相關標籤/搜索