ActiveMQ基本詳解與總結

MQ簡介

MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法胚鸯。應用程序通過寫和檢索出入列隊的針對應用程序的數(shù)據(jù)(消息)來通信,而無需專用連接來鏈接它們返帕。消息傳遞指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進行通信委煤,而不是通過直接調用彼此來通信,直接調用通常是用于諸如遠程過程調用的技術溜歪。排隊指的是應用程序通過隊列來通信抄肖。隊列的使用除去了接收和發(fā)送應用程序同時執(zhí)行的要求久信。其中較為成熟的MQ產品有IBMWEBSPHERE MQ。

MQ特點

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

使用場景

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

JMS簡介

JMS即Java消息服務(Java Message Service)應用程序接口是一個Java平臺中關于面向消息中間件(MOM)的API咖驮,用于在兩個應用程序之間边器,或分布式系統(tǒng)中發(fā)送消息,進行異步通信托修。Java消息服務是一個與具體平臺無關的API忘巧,絕大多數(shù)MOM提供商都對JMS提供支持。

定義

JMS(Java Messaging Service)是Java平臺上有關面向消息中間件(MOM)的技術規(guī)范睦刃,它便于消息系統(tǒng)中的Java應用程序進行消息交換,并且通過提供標準的產生砚嘴、發(fā)送、接收消息的接口簡化企業(yè)應用的開發(fā),翻譯為Java消息服務际长。

簡介

JMS是一種與廠商無關的 API耸采,用來訪問消息收發(fā)系統(tǒng)消息。它類似于JDBC(Java DatabaseConnectivity):這里工育,JDBC 是可以用來訪問許多不同關系數(shù)據(jù)庫的 API虾宇,而 JMS 則提供同樣與廠商無關的訪問方法,以訪問消息收發(fā)服務如绸。許多廠商目前都支持JMS嘱朽,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ怔接,這只是幾個例子搪泳。 JMS 使您能夠通過消息收發(fā)服務(有時稱為消息中介程序或路由器)從一個 JMS 客戶機向另一個JMS客戶機發(fā)送消息。消息是 JMS 中的一種類型對象蜕提,由兩部分組成:報頭和消息主體森书。報頭由路由信息以及有關該消息的元數(shù)據(jù)組成。消息主體則攜帶著應用程序的數(shù)據(jù)或有效負載谎势。根據(jù)有效負載的類型來劃分凛膏,可以將消息分為幾種類型,它們分別攜帶:簡單文本(TextMessage)脏榆、可序列化的對象 (ObjectMessage)猖毫、屬性集合 (MapMessage)、字節(jié)流 (BytesMessage)须喂、原始值流 (StreamMessage)吁断,還有無有效負載的消息 (Message)。

JMS和MQ的關系

JMS是一個用于提供消息服務的技術規(guī)范坞生,它制定了在整個消息服務提供過程中的所有數(shù)據(jù)結構和交互流程仔役。而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ī)范出臺已經是很久的事情了,但是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可以很容易內嵌到使用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. 可以很容易得調用內嵌JMS provider,進行測試

11. ActiveMQ速度非郴嗝罚快;一般要比jbossMQ快10倍辰企。

優(yōu)點

是一個快速的開源消息組件(框架)风纠,支持集群,同等網絡牢贸,自動檢測竹观,TCP,SSL潜索,廣播臭增,持久化,XA竹习,和J2EE1.4容器無縫結合誊抛,并且支持輕量級容器和大多數(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 還提供交叉語言功能浊仆,該功能整合這種功能,無需使用遠程過程調用(RPC)確實是個優(yōu)勢豫领,因為消息協(xié)助應用解耦抡柿。

2、 作為RPC的替代

使用RPC同步調用的應用十分普遍等恐。假設大多數(shù)客戶端服務器應用使用RPC洲劣,包括ATM、大多數(shù)WEB應用课蔬、信用卡系統(tǒng)囱稽、銷售點系統(tǒng)等等。盡管很多系統(tǒng)很成功购笆,但是轉換使用異步消息可以帶來很多好處粗悯,而且也不會放棄響應保證。使用同步請求的系統(tǒng)在規(guī)模上有較大的限制同欠,因為請求會被阻塞样傍,從而導致整個系統(tǒng)變慢。如果使用異步消息替代铺遂,可以很容易增加額外的消息接收者衫哥,使得消息能被并發(fā)消耗,從而加快請求處理襟锐。當然撤逢,你的系統(tǒng)應用間應該是解耦的。

3粮坞、 應用之間解耦

正如之前討論的蚊荣,緊耦合架構可以導致很多問題,尤其是如果他們是分布的莫杈。松耦合架構互例,在另一方面,證實了更少的依賴性筝闹,能夠更好地處理不可預見的改變媳叨。不僅可以在系統(tǒng)中改變組件而不影響整個系統(tǒng)腥光,而且組件交互也相當?shù)暮唵巍O啾仁褂猛降南到y(tǒng)(調用者必須等待被調用者返回信息)糊秆,異步系統(tǒng)(調用方發(fā)送消息后就不管武福,即fire-and-forget)能夠給我們帶來事件驅動架構(event-driven architecture EDA)。

4痘番、 作為事件驅動架構的主干

解耦捉片,異步架構的系統(tǒng)允許通過代理器自己配置更多的客戶端,內存等(即vertical scalability)來擴大系統(tǒng)汞舱,而不是增加更多的代理器(即horizontal scalability)界睁。考慮如亞馬遜這樣繁忙的電子商務系統(tǒng)兵拢。當用戶購買物品翻斟,事實上系統(tǒng)需要很多步驟去處理,包括下單说铃,創(chuàng)建發(fā)票访惜,付款,執(zhí)行訂單腻扇,運輸?shù)日取5怯脩粝聠魏螅瑫⒓捶祷亍爸x謝你下單”的界面幼苛。不只是沒有延遲窒篱,而且用戶還會受到一封郵件表明訂單已經收到。在亞馬遜下單的例子就是一個多步處理的例子舶沿。每一步都由單獨的服務去處理墙杯。當用戶下單是,有一個同步的體積表單動作括荡,但整個處理流程并不通過瀏覽器同步處理高镐。相反地,訂單馬上被接受和反饋畸冲。而剩下的步驟就通過異步處理嫉髓。如果在處理過程中出錯,用戶會通過郵件收到通知邑闲。這樣的異步處理能提供高負載和高可用性算行。

5、 提高系統(tǒng)擴展性

很多使用事件驅動設計的系統(tǒng)是為了獲得高可擴展性苫耸,例如電子商務州邢,政府,制造業(yè)鲸阔,線上游戲等偷霉。通過異步消息分開商業(yè)處理步驟給各個應用,能夠帶來很多可能性褐筛±嗌伲考慮設計一個應用來完成一項特殊的任務。這就是面向服務的架構(service-oriented architecture SOA)渔扎。每一個服務完成一個功能并且只有一個功能硫狞。應用就通過服務組合起來,服務間使用異步消息和最終一致性晃痴。這樣的設計便可以引入一個復雜事件處理概念(complex event processing CEP)残吩。使用CEP,部件間的交互可以被記錄追蹤倘核。在異步消息系統(tǒng)中泣侮,可以很容易在部件間增加一層處理。

個人理解總結

activeMQ是什么紧唱?

是Apache公司旗下的一個消息總線

ActiveMQ是一個開源兼容Java Message Service (JMS) 1.1面向消息的中件間. 來自Apache Software Foundation. ActiveMQ提供松耦合的應用程序架構.

activeMQ能干什么活尊?

用來在服務與服務之間進行異步通信的

activeMQ優(yōu)勢

1.流量肖鋒

2.任務異步處理

特點:可以解耦合

(學習新技術的三要素:是什么?能干什么漏益?有什么優(yōu)勢蛹锰?)

圖1:

image.png

通信模式:

1.點對點(queue)

》一個消息只能被一個服務接收

》消息一旦被消費,就會消失

》如果沒有被消費绰疤,就會一直等待铜犬,直到被消費

》多個服務監(jiān)聽同一個消費空間,先到先得

詳解:這個特點的原理是這樣的轻庆,在activeMQ

2.發(fā)布/訂閱模式(topic)

》一個消息可以被多個服務接收

》訂閱一個主題的消費者癣猾,只能消費自它訂閱之后發(fā)布的消息。

》消費端如果在生產端發(fā)送消息之后啟動余爆,是接收不到消息的煎谍,除非生產端對消息進行了持久化(例如廣播,只有當時聽到的人能聽到信息)

圖2:

image

注:消息是被推送和拉取的(消息生產端和消費端)龙屉,不是mq服務器去主動發(fā)送的

總:一些簡單常用的應用場景

1.發(fā)送郵件

詳解:

最經典的就是當用戶注冊時呐粘,我們就需要用activeMQ來做為中間件,當用戶注冊后转捕,我門把用戶的郵箱號和驗證碼等信息通過activeMQ的生產端發(fā)送到activeMQ的消息隊列中作岖,而一旦消息隊列中出現(xiàn)了數(shù)據(jù),我們的郵件模塊通過實時的監(jiān)控activeMQ的消息隊列就能通過消費端獲取到這個數(shù)據(jù)五芝,染回郵件模塊就會自行的去對數(shù)據(jù)進行解析痘儡,給用戶發(fā)送郵件

2.發(fā)送短信

詳解:

原理同發(fā)送郵件相同

3.同步索引庫

詳解:

為了緩解數(shù)據(jù)庫的壓力,我們把經常被調用的數(shù)據(jù)放入索引庫中枢步,當有請求查詢時沉删,我們會先去查詢索引庫渐尿,如果索引庫內有數(shù)據(jù),那么我們就不用就數(shù)據(jù)庫進行查詢矾瑰,這樣就能大大的減輕服務器的壓力砖茸,可是隨之而來的一個問題是,假如我們服務器內的數(shù)據(jù)已經發(fā)生了改變殴穴,而瀏覽用戶查詢數(shù)據(jù)時凉夯,因為索引庫中已經有數(shù)據(jù)了,那么這樣一來數(shù)據(jù)庫與索引庫的數(shù)據(jù)就不一致了采幌,那么怎么解決這個問題呢劲够?我們想到了通過用activeMQ來監(jiān)聽數(shù)據(jù)庫的操作來實現(xiàn)數(shù)據(jù)庫與索引庫的數(shù)據(jù)同步,當后臺管理員或房產經紀人對數(shù)據(jù)庫的數(shù)據(jù)進行了增刪改的操作時休傍,我們通過activeMQ監(jiān)聽到了數(shù)據(jù)的改變征绎,獲取到被修改的數(shù)據(jù)的id,然后在另一個服務模塊中通過這個數(shù)據(jù)的id去數(shù)據(jù)庫先查詢一把磨取,然后根據(jù)查詢結果進行判斷炒瘸,再去做索引庫的數(shù)據(jù)同步。打個比方寝衫,如果查詢結果返回的是空顷扩,就說明商品已經被刪除,那么我們就可以根據(jù)數(shù)據(jù)的id去把索引庫中的數(shù)據(jù)也一并刪除了慰毅。

4.同步靜態(tài)頁面

詳解:

此原理同上一個同步索引庫是一個原理隘截,目的都是為了減緩服務器的壓力,我們經過數(shù)據(jù)分析發(fā)現(xiàn)汹胃,其實我們的一些商品詳情頁面的數(shù)據(jù)其實都是大同小異的婶芭,完全可以通過freemarker頁面靜態(tài)化的模塊加上后臺查詢出的數(shù)據(jù)拼裝成一個靜態(tài)頁面,而這些數(shù)據(jù)從哪來呢着饥?我們經過討論和研究犀农,最后一致認為還是放在緩沖中比較好,這樣一來就能大大的減輕了數(shù)據(jù) 庫的壓力宰掉,而另一個好處是呵哨,由于頁面是純靜態(tài)頁面,所以頁面上的數(shù)據(jù)都是死數(shù)據(jù)轨奄,這樣一來就不用像JSP動態(tài)頁面那樣需要和后臺數(shù)據(jù)庫有大量的數(shù)據(jù)交互孟害,可以最大化的降低服務器的壓力,其實這個技術已經有很多大型公司在使用了挪拟,比如淘寶挨务,京東,網易等,我們要是細心一些就會發(fā)現(xiàn)谎柄,他們的頁面其實就都是HTML格式的靜態(tài)頁面丁侄。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朝巫,隨后出現(xiàn)的幾起案子鸿摇,更是在濱河造成了極大的恐慌,老刑警劉巖捍歪,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸵钝,居然都是意外死亡糙臼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門恩商,熙熙樓的掌柜王于貴愁眉苦臉地迎上來变逃,“玉大人,你說我怎么就攤上這事怠堪±柯遥” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵粟矿,是天一觀的道長凰棉。 經常有香客問我,道長陌粹,這世上最難降的妖魔是什么撒犀? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮掏秩,結果婚禮上或舞,老公的妹妹穿的比我還像新娘。我一直安慰自己蒙幻,他們只是感情好映凳,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著邮破,像睡著了一般诈豌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抒和,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天队询,我揣著相機與錄音,去河邊找鬼构诚。 笑死蚌斩,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播送膳,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼员魏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叠聋?” 一聲冷哼從身側響起撕阎,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碌补,沒想到半個月后虏束,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡厦章,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年镇匀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袜啃。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡汗侵,死狀恐怖,靈堂內的尸體忽然破棺而出群发,到底是詐尸還是另有隱情晰韵,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布熟妓,位于F島的核電站雪猪,受9級特大地震影響,放射性物質發(fā)生泄漏起愈。R本人自食惡果不足惜浪蹂,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望告材。 院中可真熱鬧坤次,春花似錦、人聲如沸斥赋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疤剑。三九已至滑绒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間隘膘,已是汗流浹背疑故。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弯菊,地道東北人纵势。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钦铁。 傳聞我的和親對象是個殘疾皇子软舌,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)牛曹,斷路器佛点,智...
    卡卡羅2017閱讀 134,665評論 18 139
  • ActiveMQ 即時通訊服務 淺析http://www.cnblogs.com/hoojo/p/active_m...
    bboymonk閱讀 1,490評論 0 11
  • 1、前言 之前我們通過兩篇文章(架構設計:系統(tǒng)間通信(19)——MQ:消息協(xié)議(上)黎比、架構設計:系統(tǒng)間通信(20)...
    境里婆娑閱讀 1,886評論 0 4
  • 簡介 ActiveMQ 特點 ActiveMQ 是由 Apache 出品的一款開源消息中間件超营,旨在為應用程序提供高...
    預流閱讀 5,928評論 4 21
  • 再遠也要離開這——回山去。只想離開這怎么洗掉一身舊皮阅虫?我們悄悄回山去演闭。 好啊,比大山晚了三個小時山里靜下來了我就讀...
    JEASIR閱讀 379評論 1 2