Java消息服務(Java Message Service,JMS)應用程序接口是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通訊。php
Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。數據庫
消息中間件的傳遞模式
消息中間件通常有兩種傳遞模型:點對點模型(PTP)和發佈-訂閱模型(Pub/Sub)[2]。
點對點模型(PTP)安全點對點模型用於消息生產者和消息消費者之間點到點的通訊。消息生產者將消息發動到由某個名字標識 的特定消費者。服務器
這個名字實際上對應於消息服務中的一個隊列(Queue),在消息傳動給消費者以前它被存儲在這個隊列中。網絡
隊列能夠是持久的,以保證在消息 服務出現故障時仍然可以傳遞消息。
發佈-訂閱模型(Pub/Sub)
發佈-訂閱模型用稱爲主題(topic)的內容分層結構代替了PTP模型中的唯一目的地,發送應 用程序發佈本身的消息,指出消息描述的是有關分層結構中的一個主題的信息。但願接收這些消息的應用程序訂閱了這個主題。訂閱包含子主題的分層結構中的主題 的訂閱者能夠接收該主題和其子主題發表的全部消息。
下圖展現了發佈和訂閱模型:
多個應用程序能夠就一個主題發佈和訂閱消息,而應用程序對其餘人仍然是匿名的。MOM 起着代理(broker)的做用,將一個主題已發表的消息路由給該主題的全部訂閱者。框架
消息中間件產品與JMS異步
因爲沒有統一的規範和標準,基於消息中間件的應用不可移植,不一樣的消息中間件也不能互操做,這大大阻礙了消息中間件的發展。 Java Message Service(JMS, Java消息服務)是SUN及其夥伴公司提出的旨在統一各類消息中間件系統接口的規範。它定義了一套通用的接口和相關語義,提供了諸如持久、驗證和事務的消息服務,它最主要的目的是容許Java應用程序訪問現有的消息中間件。JMS規範沒有指定在消息節點間所使用的通信底層協議,來保證應用開發人員不用與其細節打交道,一個特定的JMS實現可能提供基於TCP/IP、HTTP、UDP或者其它的協議。分佈式
目前許多廠商採用並實現了JMS API,如今,JMS產品可以爲企業提供一套完整的消息傳遞功能,下面是一些比較流行的JMS商業軟件和開源產品。工具
1.IBM MQSeries開發工具
IBM MQ系列產品提供的服務使得應用程序可使用消息隊列進行相互交流,經過一系列基於Java的API,提供了MQSeries在Java中應用開發的方法。它支持點到點和發佈/訂閱兩種消息模式,在基本消息服務的基礎上增長告終構化消息類,經過工做單元提供數據整合等內容。
2.WebLogic
WebLogic是BEA公司實現的基於工業標準的J2EE應用服務器,支持大多數企業級JavaAPI,它徹底兼容JMS規範,支持點到點和發佈/訂閱消息模式,它具備如下一些特色:
1) 經過使用管理控制檯設置JMS配置信息;
2) 支持消息的多點廣播;
3) 支持持久消息存儲的文件和數據庫;
4) 支持XML消息,動態建立持久隊列和主題。
3.SonicMQ
SonicMQ是Progress公司實現的JMS產品。除了提供基本的消息驅動服務以外,SonicMQ也提供了不少額外的企業級應用開發工具包,它具備如下一些基本特徵:
1) 提供JMS規範的徹底實現,支持點到點消息模式和發佈/訂閱消息模式;
2) 支持層次安全管理;
3) 確保消息在Internet上的持久發送;
4) 動態路由構架(DRA)使企業可以經過單個消息服務器動態的交換消息;
5) 支持消息服務器的集羣。
4.Active MQ
Active MQ是一個基於Apcache 2.0 licenced發佈,開放源碼的JMS產品。其特色爲:
1) 提供點到點消息模式和發佈/訂閱消息模式;
2) 支持JBoss、Geronimo等開源應用服務器,支持Spring框架的消息驅動;
3) 新增了一個P2P傳輸層,能夠用於建立可靠的P2P JMS網絡鏈接;
4) 擁有消息持久化、事務、集羣支持等JMS基礎設施服務。
5.OpenJMS
OpenJMS是一個開源的JMS規範的實現,它包含如下幾個特徵:
1) 它支持點到點模型和發佈/訂閱模型;
2) 支持同步與異步消息發送;
3) 可視化管理界面,支持Applet;
4) 可以與Jakarta Tomcat這樣的Servlet容器結合;
5) 支持RMI、TCP、HTTP與SSL協議。