前一段在組內作過一次有關《JMS和ActiveMQ介紹》的技術分享,今天把幻燈片整理了一下,但願和你們多交流。java
![]() |
JMS,java消息服務是由Sun提出的一套消息傳送API規範,而ActiveMQ是一款開源的消息服務器產品。服務器
消息傳送機制是在多個系統之間引入消息服務器,由消息服務器接收來自各系統的消息並將消息轉發到相應的系統上,以實現各系統之間的通訊。併發
而在每一個系統中,應用程序經過調用消息傳送API來進行消息的發送和接收,消息傳送API再經過各消息服務器所對應的消息傳送客戶端將消息發送至服務器或從服務器接收消息。負載均衡
目前,消息服務器產品中,異步
屬於商業軟件的有:IBM WebSphere MQ、SonicMQ、Microsoft Message Queuing(mSMQ);ide
屬於開源軟件的有:ActiveMQ、OpenMQ、RabbitMQ。ui
雖然消息服務器產品較多,但基本遵循同一個消息傳送API規範,即JMS(Java Message Service,Java消息服務):spa
1)JMS是由Sun發起建立;設計
2)它與JDBC相似,只定義消息傳送的相關接口,由消息服務器產品本身實現相應的接口功能;blog
所以,在使用不一樣的消息服務器產品時,系統中的應用程序可使用同一個消息傳送API。
消息傳送機制具備如下優勢:
1)能夠實現異構集成,不一樣平臺、不一樣語言的系統能夠經過消息進行通訊,實現集成。例如,ActiveMQ支持多語言,除Java之外,還包括C、PHP、Python。
2)能夠緩解系統瓶頸,當系統同步處理的請求數量增大時,會形成請求阻塞,若是使用消息傳送機制,能夠將請求以消息方式發送至消息服務器,並由多個請求處理模塊接收消息進行併發處理。
3)能夠提升可伸縮性,這個與緩解系統瓶頸相似,經過增長或減小消息接收者來控制併發處理的能力,提升可伸縮性。
4)能夠提升最終用戶生產率,這是由於使用消息傳送機制時,能夠對請求進行異步處理,請求以消息方式發送至消息服務器後,最終用戶無需同步等待請求返回結果。
5)體系結構靈活性和敏捷性,咱們知道系統設計的一個基本原則就是高內聚、低耦合,經過引入消息傳送機制,各系統服務以消息的形式抽象出來,減小系統之間的耦合,提升系統結構靈活性和敏捷性。
![]() |
首先,先引入如下概念:
JMS提供者(Provider),消息服務器;
目的地(Destination、Queue、Topic),消息在JMS提供者中的目的地;
生產者(Producer、Sender、Publisher),發送消息;
消費者(Consumer、Receiver、Subscriber),接收消息。
兩種消息傳送模型:
隊列(一對一):
基於拉取(Pull)或基於輪詢(polling);
發送到隊列的消息被一個並且僅僅一個接收者所接收,即便有多個接收者在一個隊列中偵聽同一消息;
既支持異步「即發即棄」消息傳送方式,又支持同步請求/應答消息傳送方式;
支持負載均衡。
主題(一對多):
基於推送(push)的模型,其中消息自動地向消費者廣播,它們無須請求或輪詢主題來得到新消息。