什么是JMS
- JMS即Java消息服務(Java Message Service)應用程序接口是一個Java平臺中關于面向消息中間件(MOM)的API薪寓,用于在兩個應用程序之間枣耀,或分布式系統(tǒng)中發(fā)送消息痢虹,進行異步通信使鹅。Java消息服務是一個與具體平臺無關的API捻浦,絕大多數MOM提供商都對JMS提供支持昨登。
- JMS是一種與廠商無關的 API蹬挤,用來訪問消息收發(fā)系統(tǒng)消息。它類似于JDBC(Java Database Connectivity):這里调鲸,JDBC 是可以用來訪問許多不同關系數據庫的 API盛杰,而 JMS 則提供同樣與廠商無關的訪問方法,以訪問消息收發(fā)服務藐石。許多廠商都支持 JMS即供,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ于微,這只是幾個例子逗嫡。 JMS 使您能夠通過消息收發(fā)服務(有時稱為消息中介程序或路由器)從一個 JMS 客戶機向另一個 JMS客戶機發(fā)送消息。消息是 JMS 中的一種類型對象株依,由兩部分組成:報頭和消息主體驱证。報頭由路由信息以及有關該消息的元數據組成。消息主體則攜帶著應用程序的數據或有效負載恋腕。根據有效負載的類型來劃分抹锄,可以將消息分為幾種類型,它們分別攜帶:簡單文本(TextMessage)荠藤、可序列化的對象 (ObjectMessage)伙单、屬性集合 (MapMessage)、字節(jié)流 (BytesMessage)哈肖、原始值流 (StreamMessage)吻育,還有無有效負載的消息 (Message)。
JMS規(guī)范
專業(yè)技術規(guī)范
- JMS(Java Messaging Service)是Java平臺上有關面向消息中間件(MOM)的技術規(guī)范淤井,它便于消息系統(tǒng)中的Java應用程序進行消息交換,并且通過提供標準的產生布疼、發(fā)送摊趾、接收消息的接口簡化企業(yè)應用的開發(fā),翻譯為Java消息服務游两。
體系架構
- JMS由以下元素組成严就。
- JMS提供者provider:連接面向消息中間件的,JMS接口的一個實現器罐。提供者可以是Java平臺的JMS實現梢为,也可以是非Java平臺的面向消息中間件的適配器。
- JMS客戶:生產或消費基于消息的Java的應用程序或對象轰坊。
- JMS生產者:創(chuàng)建并發(fā)送消息的JMS客戶铸董。
- JMS消費者:接收消息的JMS客戶。
- JMS消息:包括可以在JMS客戶之間傳遞的數據的對象
- JMS隊列:一個容納那些被發(fā)送的等待閱讀的消息的區(qū)域肴沫。與隊列名字所暗示的意思不同粟害,消息的接受順序并不一定要與消息的發(fā)送順序相同。一旦一個消息被閱讀颤芬,該消息將被從隊列中移走悲幅。
- JMS主題:一種支持發(fā)送消息給多個訂閱者的機制。
Java消息服務應用程序結構支持兩種模型
點對點或隊列模型
- 在點對點或隊列模型下站蝠,一個生產者向一個特定的隊列發(fā)布消息汰具,一個消費者從該隊列中讀取消息。這里菱魔,生產者知道消費者的隊列留荔,并直接將消息發(fā)送到消費者的隊列。
- 這種模式被概括為:
只有一個消費者將獲得消息
生產者不需要在接收者消費該消息期間處于運行狀態(tài)澜倦,接收者也同樣不需要在消息發(fā)送時處于運行狀態(tài)聚蝶。
每一個成功處理的消息都由接收者簽收
發(fā)布者/訂閱者模型
- 發(fā)布者/訂閱者模型支持向一個特定的消息主題發(fā)布消息。0或多個訂閱者可能對接收來自特定消息主題的消息感興趣藻治。在這種模型下碘勉,發(fā)布者和訂閱者彼此不知道對方。這種模式好比是匿名公告板桩卵。
- 這種模式被概括為:
- 多個消費者可以獲得消息
- 在發(fā)布者和訂閱者之間存在時間依賴性验靡。發(fā)布者需要建立一個訂閱(subscription),以便客戶能夠訂閱吸占。訂閱者必須保持持續(xù)的活動狀態(tài)以接收消息晴叨,除非訂閱者建立了持久的訂閱凿宾。在那種情況下矾屯,在訂閱者未連接時發(fā)布的消息將在訂閱者重新連接時重新發(fā)布。
常用的JMS實現
- 要使用Java消息服務初厚,你必須要有一個JMS提供者件蚕,管理會話和隊列孙技。既有開源的提供者也有專有的提供者。
- 開源的提供者包括:
Apache ActiveMQ
JBoss 社區(qū)所研發(fā)的 HornetQ
Joram
Coridan的MantaRay
The OpenJMS Group的OpenJMS
- 專有的提供者包括:
BEA的BEA WebLogic Server JMS
TIBCO Software的EMS
GigaSpaces Technologies的GigaSpaces
Softwired 2006的iBus
IONA Technologies的IONA JMS
SeeBeyond的IQManager(2005年8月被Sun Microsystems并購)
webMethods的JMS+ -
my-channels的Nirvana
Sonic Software的SonicMQ
SwiftMQ的SwiftMQ
IBM的WebSphere MQ