定義:java
JMS是java消息服務(是目前java消息服務的一個統一的技術標準),它的思想是經過消息中間件(MOM)來接收以及發送消息。經過引入消息中間件,進行異步通訊,很好的緩解了同步時二者調用中產生延時(A應用等待B處理的結果)的痛苦,並很大程度的下降了兩個應用之間的耦合性,使得兩邊任意一個應用轉移,都不會對另一邊的程序產生任何影響。python
優勢:c++
1.發送者將消息發送給消息服務器,消息服務器將消息存放在若干隊列中,在合適的時候再將消息轉發給接收者。這種模式下,發送和接收是異步的,發送者無需等待;下降了耦合度 spring
2.異步處理,發送者和消費者的生命週期未必相同:發送消息的時候接收者不必定運行,接收消息的時候發送者也不必定運行;數據庫
3.可以保證消息發送失敗的時候進行存儲(activemq中,推薦使用kahaDB進行文件存儲)。 對於消息可達性要求高的應用,須要使用存儲來保證可靠性。而對於那些實時消息應用則不須要存儲,這樣能夠保證性能。一旦出現系統異常,消息隊列中沒有被MessageListener的onMessage方法獲取的消息都會被存儲下來,在下次系統啓動的時候會自動完成獲取那部分存儲下來的數據,並完成onMessage方法的整個步驟。api
4.一對多通訊:對於一個消息能夠有多個接收者。服務器
應用場景:網絡
1.當出現多語言以前通訊的時候,activemq是一個選擇。activemq的中間消息代理是java寫的,天然有java客戶端api,但同時它也提供了c/c++、python等其餘語言的客戶端。架構
2.當你須要多個應用通訊,而又不想被RPC技術所束縛的時候。RPC是同步的,慢的,耦合性強的,基於jms的activemq能夠很好的彌補這個缺陷。框架
3.當須要兩個應用之間解耦的時候。
4.當須要事件驅動架構的時候。好比訂單,下了訂單後不會等待,會立馬跳轉到一個下單成功的頁面,但是這是後臺程序還在執行,當有什麼狀態更新的時候,後臺程序會主動調用一個接口來通知你。這整個流程就是一個事件驅動模式。你不須要等待任務,任務本身執行,有更新了會主動通知你。
5.面臨着高可擴展性的不斷髮展。SOA思想不斷滲透,現今的軟件開發業務各自分離,支付寶專門作支付,淘寶、天貓就專門作本身的電商平臺、順豐也有本身的軟件部門來處理物流方面的問題,業務不斷拆分不斷細化的同時,要鏈接多個應用,就須要進行網絡通信,而同步的處理方式已經不能產生一個優良的用戶體驗,這時異步的JMS技術就能很好的解決這個問題。
ActiveMQ:
ActiveMQ是一種開源的,實現了JMS1.1規範的,面向消息(MOM)的中間件
特色:
穩定性:失敗重連機制failover,持久化服務,容錯機制,多種恢復機制
高效性:支持多種傳送協議TCP,SSL,NIO,UDP,集羣服務消息在多個代理之間轉發防止消息丟失,支持超快的JDBC消息持久化和高效的日誌系統
可擴展:activemq的高級特性均可以配置的形式來表現,很好的實現例如遊標,容錯機制,消息group及監控服務,同時擴展了不少成熟的框架spring使得其使用更加成熟
高級特性
消息羣組(Message Groups)、虛擬端點(Virtual Destinations)、通配符(Wildcards)、複合端點(Composite Destinations)
總體架構:
傳輸協議:消息之間的傳遞,無疑須要協議進行溝通,啓動一個ActiveMQ打開了一個監聽端口, ActiveMQ提供了普遍的鏈接模式,其中主要包括SSL、STOMP
、XMPP;ActiveMQ默認的使用的協議是openWire,端口號:61616;
消息域:ActiveMQ主要包含Point-to-Point (點對點),Publish/Subscribe Model (發佈/訂閱者),其中在Publich/Subscribe 模式下又有Nondurable subscription和 durable subscription (持久化訂閱)2種消息處理方式
消息存儲:在消息傳遞過程當中,部分重要的消息可能須要存儲到數據庫或文件系統中,當中介崩潰時,信息不回丟失
Cluster (集羣): 最多見到 集羣方式包括network of brokers和Master Slave;
Monitor (監控) :ActiveMQ通常由jmx來進行監控