ActiveMQ學習(一)簡介

MQ簡介:MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序?qū)贸绦虻耐ㄐ欧椒ǜА贸绦蛲ㄟ^寫和檢索出入列隊的針對應用程序的數(shù)據(jù)(消息)來通信甘耿,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進行通信兽掰,而不是通過直接調(diào)用彼此來通信芭碍,直接調(diào)用通常是用于諸如遠程過程調(diào)用的技術(shù)。排隊指的是應用程序通過隊列來通信孽尽。隊列的使用除去了接收和發(fā)送應用程序同時執(zhí)行的要求窖壕。其中較為成熟的MQ產(chǎn)品有IBMWEBSPHERE MQ。
MQ特點:
MQ的消費-生產(chǎn)者模型的一個典型的代表杉女,一端往消息隊列中不斷的寫入消息瞻讽,而另一端則可以讀取或者訂閱隊列中的消息。MQ和JMS類似熏挎,但不同的是JMS是SUN Java消息中間件服務的一個標準和API定義速勇,而MQ則是遵循了AMQP協(xié)議的具體實現(xiàn)和產(chǎn)品。
使用場景:
在項目中婆瓜,將一些無需即時返回且耗時的操作提取出來快集,進行了異步處理,而這種異步處理的方式大大的節(jié)省了服務器的請求響應時間廉白,從而提高了系統(tǒng)的吞吐量个初。
JMS簡介:
JMS即Java消息服務(Java Message Service)應用程序接口是一個Java平臺中關(guān)于面向消息中間件(MOM)的API,用于在兩個應用程序之間猴蹂,或分布式系統(tǒng)中發(fā)送消息院溺,進行異步通信。Java消息服務是一個與具體平臺無關(guān)的API磅轻,絕大多數(shù)MOM提供商都對JMS提供支持珍逸。
定義:
JMS(Java Messaging Service)是Java平臺上有關(guān)面向消息中間件(MOM)的技術(shù)規(guī)范,它便于消息系統(tǒng)中的Java應用程序進行消息交換,并且通過提供標準的產(chǎn)生聋溜、發(fā)送谆膳、接收消息的接口簡化企業(yè)應用的開發(fā),翻譯為Java消息服務撮躁。
簡介:
JMS是一種與廠商無關(guān)的 API漱病,用來訪問消息收發(fā)系統(tǒng)消息。它類似于JDBC(Java DatabaseConnectivity):這里把曼,JDBC 是可以用來訪問許多不同關(guān)系數(shù)據(jù)庫的 API杨帽,而 JMS 則提供同樣與廠商無關(guān)的訪問方法,以訪問消息收發(fā)服務嗤军。許多廠商目前都支持JMS注盈,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ叙赚,這只是幾個例子老客。 JMS 使您能夠通過消息收發(fā)服務(有時稱為消息中介程序或路由器)從一個 JMS 客戶機向另一個JMS客戶機發(fā)送消息僚饭。消息是 JMS 中的一種類型對象,由兩部分組成:報頭和消息主體胧砰。報頭由路由信息以及有關(guān)該消息的元數(shù)據(jù)組成浪慌。消息主體則攜帶著應用程序的數(shù)據(jù)或有效負載。根據(jù)有效負載的類型來劃分朴则,可以將消息分為幾種類型,它們分別攜帶:簡單文本(TextMessage)钓简、可序列化的對象 (ObjectMessage)乌妒、屬性集合 (MapMessage)、字節(jié)流 (BytesMessage)外邓、原始值流 (StreamMessage)撤蚊,還有無有效負載的消息 (Message)。
JMS和MQ的關(guān)系:
JMS是一個用于提供消息服務的技術(shù)規(guī)范损话,它制定了在整個消息服務提供過程中的所有數(shù)據(jù)結(jié)構(gòu)和交互流程侦啸。而MQ則是消息隊列服務,是面向消息中間件(MOM)的最終實現(xiàn)丧枪,是真正的服務提供者光涂;MQ的實現(xiàn)可以基于JMS,也可以基于其他規(guī)范或標準拧烦。
支持JMS的開源MQ:
目前選擇的最多的是ActiveMQ忘闻。
ActiveMQ 是Apache出品,最流行的恋博,能力強勁的開源消息總線齐佳。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規(guī)范的 JMS Provider實現(xiàn),盡管JMS規(guī)范出臺已經(jīng)是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位。
主要特點:

  1. 多種語言和協(xié)議編寫客戶端债沮。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP炼吴。應用協(xié)議: OpenWire,Stomp REST,WSNotification,XMPP,AMQP
  2. 完全支持JMS1.1和J2EE 1.4規(guī)范 (持久化,XA消息,事務)
  3. spring的支持,ActiveMQ可以很容易內(nèi)嵌到使用Spring的系統(tǒng)里面去,而且也支持Spring2.0的特性
  4. 通過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業(yè)服務器上
  5. 支持多種傳送協(xié)議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  6. 支持通過JDBC和journal提供高速的消息持久化
  7. 從設計上保證了高性能的集群,客戶端-服務器,點對點
  8. 支持Ajax
  9. 支持與Axis的整合
  10. 可以很容易得調(diào)用內(nèi)嵌JMS provider,進行測試
  11. ActiveMQ速度非常快疫衩;一般要比jbossMQ快10倍硅蹦。
    優(yōu)點:是一個快速的開源消息組件(框架),支持集群隧土,同等網(wǎng)絡提针,自動檢測,TCP曹傀,SSL辐脖,廣播,持久化皆愉,XA嗜价,和J2EE1.4容器無縫結(jié)合艇抠,并且支持輕量級容器和大多數(shù)跨語言客戶端上的Java虛擬機。消息異步接受久锥,減少軟件多系統(tǒng)集成的耦合度家淤。消息可靠接收,確保消息在中間件可靠保存瑟由,多個消息也可以組成原子事務絮重。
    缺點:ActiveMQ默認的配置性能偏低,需要優(yōu)化配置歹苦,但是配置文件復雜青伤,ActiveMQ本身不提供管理工具;示例代碼少殴瘦;主頁上的文檔看上去比較全面狠角,但是缺乏一種有效的組織方式,文檔只有片段蚪腋,用戶很難由淺入深進行了解丰歌,二、文檔整體的專業(yè)性太強屉凯。在研究階段可以通過查maillist立帖、看Javadoc、分析源代碼來了解悠砚。
    ActiveMQ應用場景:
    1厘惦、 不同語言應用集成
    ActiveMQ 中間件用Java語言編寫,因此自然提供Java客戶端 API哩簿。但是ActiveMQ 也為C/C++宵蕉、.NET、Perl节榜、PHP羡玛、Python、Ruby 和一些其它語言提供客戶端宗苍。在你考慮如何集成不同平臺不同語言編寫應用的時候稼稿,ActiveMQ 擁有巨大優(yōu)勢。在這樣的例子中讳窟,多種客戶端API通過ActiveMQ 發(fā)送和接受消息成為可能让歼,無論使用的是什么語言。此外丽啡,ActiveMQ 還提供交叉語言功能谋右,該功能整合這種功能硫嘶,無需使用遠程過程調(diào)用(RPC)確實是個優(yōu)勢发皿,因為消息協(xié)助應用解耦。
    2、 作為RPC的替代
    使用RPC同步調(diào)用的應用十分普遍衡未。假設大多數(shù)客戶端服務器應用使用RPC臼婆,包括ATM丁频、大多數(shù)WEB應用按声、信用卡系統(tǒng)、銷售點系統(tǒng)等等终蒂。盡管很多系統(tǒng)很成功蜂林,但是轉(zhuǎn)換使用異步消息可以帶來很多好處,而且也不會放棄響應保證拇泣。使用同步請求的系統(tǒng)在規(guī)模上有較大的限制悉尾,因為請求會被阻塞,從而導致整個系統(tǒng)變慢挫酿。如果使用異步消息替代,可以很容易增加額外的消息接收者愕难,使得消息能被并發(fā)消耗早龟,從而加快請求處理。當然猫缭,你的系統(tǒng)應用間應該是解耦的葱弟。
    3、 應用之間解耦
    正如之前討論的猜丹,緊耦合架構(gòu)可以導致很多問題芝加,尤其是如果他們是分布的。松耦合架構(gòu)射窒,在另一方面藏杖,證實了更少的依賴性,能夠更好地處理不可預見的改變脉顿。不僅可以在系統(tǒng)中改變組件而不影響整個系統(tǒng)蝌麸,而且組件交互也相當?shù)暮唵巍O啾仁褂猛降南到y(tǒng)(調(diào)用者必須等待被調(diào)用者返回信息)艾疟,異步系統(tǒng)(調(diào)用方發(fā)送消息后就不管来吩,即fire-and-forget)能夠給我們帶來事件驅(qū)動架構(gòu)(event-driven architecture EDA)。
    4蔽莱、 作為事件驅(qū)動架構(gòu)的主干
    解耦弟疆,異步架構(gòu)的系統(tǒng)允許通過代理器自己配置更多的客戶端,內(nèi)存等(即vertical scalability)來擴大系統(tǒng)盗冷,而不是增加更多的代理器(即horizontal scalability)怠苔。考慮如亞馬遜這樣繁忙的電子商務系統(tǒng)仪糖。當用戶購買物品嘀略,事實上系統(tǒng)需要很多步驟去處理恤溶,包括下單,創(chuàng)建發(fā)票帜羊,付款咒程,執(zhí)行訂單,運輸?shù)人嫌5怯脩粝聠魏笳室觯瑫⒓捶祷亍爸x謝你下單”的界面。不只是沒有延遲奶段,而且用戶還會受到一封郵件表明訂單已經(jīng)收到饥瓷。在亞馬遜下單的例子就是一個多步處理的例子。每一步都由單獨的服務去處理痹籍。當用戶下單是呢铆,有一個同步的體積表單動作,但整個處理流程并不通過瀏覽器同步處理蹲缠。相反地棺克,訂單馬上被接受和反饋。而剩下的步驟就通過異步處理线定。如果在處理過程中出錯娜谊,用戶會通過郵件收到通知。這樣的異步處理能提供高負載和高可用性斤讥。
    5纱皆、 提高系統(tǒng)擴展性
    很多使用事件驅(qū)動設計的系統(tǒng)是為了獲得高可擴展性,例如電子商務芭商,政府派草,制造業(yè),線上游戲等铛楣。通過異步消息分開商業(yè)處理步驟給各個應用澳眷,能夠帶來很多可能性◎劝考慮設計一個應用來完成一項特殊的任務钳踊。這就是面向服務的架構(gòu)(service-oriented architecture SOA)。每一個服務完成一個功能并且只有一個功能勿侯。應用就通過服務組合起來拓瞪,服務間使用異步消息和最終一致性。這樣的設計便可以引入一個復雜事件處理概念(complex event processing CEP)助琐。使用CEP祭埂,部件間的交互可以被記錄追蹤。在異步消息系統(tǒng)中,可以很容易在部件間增加一層處理蛆橡。
    其他開源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大部分都已經(jīng)停止發(fā)展了,剩下的幾個都是找到了東家泰演,和某種J2EE 服務器掛鉤呻拌,比如jbossmq 與jboss,joram與jonas(objectweb組織),ActiveMQ 與Geronimo(ASF APACHE基金組織)睦焕,而在這3個之間藐握,從網(wǎng)絡底層來看,只有ActiveMQ使用了NIO垃喊,單從這個角度來看ActiveMQ在性能上會有一定的優(yōu)勢猾普。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市本谜,隨后出現(xiàn)的幾起案子初家,更是在濱河造成了極大的恐慌,老刑警劉巖乌助,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溜在,死亡現(xiàn)場離奇詭異,居然都是意外死亡眷茁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門纵诞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來上祈,“玉大人,你說我怎么就攤上這事浙芙〉谴蹋” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵嗡呼,是天一觀的道長纸俭。 經(jīng)常有香客問我,道長南窗,這世上最難降的妖魔是什么揍很? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮万伤,結(jié)果婚禮上窒悔,老公的妹妹穿的比我還像新娘。我一直安慰自己敌买,他們只是感情好简珠,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虹钮,像睡著了一般聋庵。 火紅的嫁衣襯著肌膚如雪膘融。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天祭玉,我揣著相機與錄音氧映,去河邊找鬼。 笑死攘宙,一個胖子當著我的面吹牛屯耸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹭劈,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疗绣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铺韧?” 一聲冷哼從身側(cè)響起多矮,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哈打,沒想到半個月后塔逃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡料仗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年湾盗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片立轧。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡格粪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氛改,到底是詐尸還是另有隱情帐萎,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布胜卤,位于F島的核電站疆导,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏葛躏。R本人自食惡果不足惜澈段,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舰攒。 院中可真熱鬧均蜜,春花似錦、人聲如沸芒率。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至充择,卻和暖如春德玫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椎麦。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工宰僧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人观挎。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓琴儿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嘁捷。 傳聞我的和親對象是個殘疾皇子造成,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容