前一段在組內做過一次有關《JMS和ActiveMQ介紹》的技術分享,今天把幻燈片整理了一下,希望和大家多交流。
JMS,java消息服務是由Sun提出的一套消息傳送API規範,而ActiveMQ是一款開源的消息服務器產品。
消息傳送機制是在多個系統之間引入消息服務器,由消息服務器接收來自各系統的消息並將消息轉發到相應的系統上,以實現各系統之間的通信。
而在每個系統中,應用程序通過調用消息傳送API來進行消息的發送和接收,消息傳送API再通過各消息服務器所對應的消息傳送客戶端將消息發送至服務器或從服務器接收消息。
目前,消息服務器產品中,
屬於商業軟件的有:IBM WebSphere MQ、SonicMQ、Microsoft Message Queuing(mSMQ);
屬於開源軟件的有:ActiveMQ、OpenMQ、RabbitMQ。
雖然消息服務器產品較多,但基本遵循同一個消息傳送API規範,即JMS(Java Message Service,Java消息服務):
1)JMS是由Sun發起創建;
2)它與JDBC類似,只定義消息傳送的相關接口,由消息服務器產品自己實現相應的接口功能;
因此,在使用不同的消息服務器產品時,系統中的應用程序可以使用同一個消息傳送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)的模型,其中消息自動地向消費者廣播,它們無須請求或輪詢主題來獲得新消息。