JMS

JMS

面向消息中間件的API
jms即Java消息服務(JavaMessageService)應用程序接口是一個Java平台中關于面向消息中間件(MOM)的API[1],用于在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。Java消息服務是一個與具體平台無關的API,絕大多數MOM提供商都對JMS提供支持。jms同時也可以指JournalofMarketingScience,《營銷科學學報》的簡稱。此外,佳木斯、姐妹們的拼音縮寫也是jms。
  • 中文名:
  • 外文名:
  • 所屬品牌:
  • 産品類型:
  • 英文名:JMS
  • 其他外文名:Java Messaging Service
  • 性質:API
  • 平台:Java平台
  • 定義:Java消息服務

技術規範

JMS(Java Messaging Service)是Java平台上有關面向消息中間件(MOM)的技術規範,它便于消息系統中的Java應用程序進行消息交換,并且通過提供标準的産生、發送、接收消息的接口簡化企業應用的開發,翻譯為Java消息服務。

曆史

Java消息服務是一個在 Java标準化組織(JCP)内開發的标準(代号JSR 914)。2001年6月25日,Java消息服務發布JMS 1.0.2b,2002年3月18日Java消息服務發布 1.1,統一了消息域。

體系架構

JMS由以下元素組成。

JMS提供者:連接面向消息中間件的,JMS接口的一個實現。提供者可以是Java平台的JMS實現,也可以是非Java平台的面向消息中間件的适配器。

JMS客戶:生産或消費基于消息的Java的應用程序或對象。

JMS生産者:創建并發送消息的JMS客戶。

JMS消費者:接收消息的JMS客戶。

JMS消息:包括可以在JMS客戶之間傳遞的數據的對象

JMS隊列:一個容納那些被發送的等待閱讀的消息的區域。與隊列名字所暗示的意思不同,消息的接受順序并不一定要與消息的發送順序相同。一旦一個消息被閱讀,該消息将被從隊列中移走。

JMS主題:一種支持發送消息給多個訂閱者的機制。

對象模型

JMS對象模型包含如下幾個要素:

1)連接工廠。連接工廠(ConnectionFactory)是由管理員創建,并綁定到JNDI樹中。客戶端使用JNDI查找連接工廠,然後利用連接工廠創建一個JMS連接。

2)JMS連接。JMS連接(Connection)表示JMS客戶端和服務器端之間的一個活動的連接,是由客戶端通過調用連接工廠的方法建立的。

3)JMS會話。JMS會話(Session)表示JMS客戶與JMS服務器之間的會話狀态。JMS會話建立在JMS連接上,表示客戶與服務器之間的一個會話線程。

4)JMS目的。JMS目的(Destination),又稱為消息隊列,是實際的消息源。

5)JMS生産者和消費者。生産者(Message Producer)和消費者(Message Consumer)對象由Session對象創建,用于發送和接收消息。

6)JMS消息通常有兩種類型:

① 點對點(Point-to-Point)。在點對點的消息系統中,消息分發給一個單獨的使用者。點對點消息往往與隊列(javax.jms.Queue)相關聯。

② 發布/訂閱(Publish/Subscribe)。發布/訂閱消息系統支持一個事件驅動模型,消息生産者和消費者都參與消息的傳遞。生産者發布事件,而使用者訂閱感興趣的事件,并使用事件。該類型消息一般與特定的主題(javax.jms.Topic)關聯。

模型

Java消息服務應用程序結構支持兩種模型:在點對點或隊列模型下,一個生産者向一個特定的隊列發布消息,一個消費者從該隊列中讀取消息。這裡,生産者知道消費者的隊列,并直接将消息發送到消費者的隊列。這種模式被概括為:隻有一個消費者将獲得消息,生産者不需要在接收者消費該消息期間處于運行狀态,接收者也同樣不需要在消息發送時處于運行狀态。

每一個成功處理的消息都由接收者簽收,發布者/訂閱者模型支持向一個特定的消息主題發布消息。0或多個訂閱者可能對接收來自特定消息主題的消息感興趣。在這種模型下,發布者和訂閱者彼此不知道對方。這種模式好比是匿名公告闆。這種模式被概括為:多個消費者可以獲得消息,在發布者和訂閱者之間存在時間依賴性。發布者需要建立一個訂閱(subscription),以便客戶能夠訂閱。訂閱者必須保持持續的活動狀态以接收消息,除非訂閱者建立了持久的訂閱。在那種情況下,在訂閱者未連接時發布的消息将在訂閱者重新連接時重新發布。

使用Java語言,JMS提供了将應用與提供數據的傳輸層相分離的方式。同一組Java類可以通過JNDI中關于提供者的信息,連接不同的JMS提供者。這一組類首先使用一個連接工廠以連接到隊列或主題,然後發送或發布消息。在接收端,客戶接收或訂閱這些消息。

傳遞方式

JMS有兩種傳遞消息的方式。标記為NON_PERSISTENT的消息最多投遞一次,而标記為PERSISTENT的消息将使用暫存後再轉送的機理投遞。如果一個JMS服務離線,那麼持久性消息不會丢失但是得等到這個服務恢複聯機時才會被傳遞。所以默認的消息傳遞方式是非持久性的。即使使用非持久性消息可能降低内務和需要的存儲器,并且這種傳遞方式隻有當你不需要接收所有的消息時才使用。

雖然JMS規範并不需要JMS供應商實現消息的優先級路線,但是它需要遞送加快的消息優先于普通級别的消息。JMS定義了從0到9的優先級路線級别,0是最低的優先級而9則是最高的。更特殊的是0到4是正常優先級的變化幅度,而5到9是加快的優先級的變化幅度。舉例來說: topicPublisher.publish (message, DeliveryMode.PERSISTENT, 8, 10000); //Pub-Sub 或 queueSender.send(message,DeliveryMode.PERSISTENT, 8, 10000);//P2P  這個代碼片斷,有兩種消息模型,映射遞送方式是持久的,優先級為加快型,生存周期是10000 (以毫秒度量)。如果生存周期設置為零,這則消息将永遠不會過期。當消息需要時間限制否則将使其無效時,設置生存周期是有用的。

JMS定義了五種不同的消息正文格式,以及調用的消息類型,允許你發送并接收以一些不同形式的數據,提供現有消息格式的一些級别的兼容性。

· StreamMessage -- Java原始值的數據流

· MapMessage--一套名稱-值對

· TextMessage--一個字符串對象

· ObjectMessage--一個序列化的 Java對象

· BytesMessage--一個未解釋字節的數據流

應用程序

ConnectionFactory 接口(連接工廠)

用戶用來創建到JMS提供者的連接的被管對象。JMS客戶通過可移植的接口訪問連接,這樣當下層的實現改變時,代碼不需要進行修改。管理員在JNDI名字空間中配置連接工廠,這樣,JMS客戶才能夠查找到它們。根據消息類型的不同,用戶将使用隊列連接工廠,或者主題連接工廠。

Connection 接口(連接)連接代表了應用程序和消息服務器之間的通信鍊路。在獲得了連接工廠後,就可以創建一個與JMS提供者的連接。根據不同的連接類型,連接允許用戶創建會話,以發送和接收隊列和主題到目标。

Destination 接口(目标)目标是一個包裝了消息目标标識符的被管對象,消息目标是指消息發布和接收的地點,或者是隊列,或者是主題。JMS管理員創建這些對象,然後用戶通過JNDI發現它們。和連接工廠一樣,管理員可以創建兩種類型的目标,點對點模型的隊列,以及發布者/訂閱者模型的主題。

Session 接口(會話)表示一個單線程的上下文,用于發送和接收消息。由于會話是單線程的,所以消息是連續的,就是說消息是按照發送的順序一個一個接收的。會話的好處是它支持事務。如果用戶選擇了事務支持,會話上下文将保存一組消息,直到事務被提交才發送這些消息。在提交事務之前,用戶可以使用回滾操作取消這些消息。一個會話允許用戶創建消息生産者來發送消息,創建消息消費者來接收消息。

MessageConsumer 接口(消息消費者)由會話創建的對象,用于接收發送到目标的消息。消費者可以同步地(阻塞模式),或(非阻塞)接收隊列和主題類型的消息。

MessageProducer 接口(消息生産者)由會話創建的對象,用于發送消息到目标。用戶可以創建某個目标的發送者,也可以創建一個通用的發送者,在發送消息時指定目标。

Message 接口(消息)是在消費者和生産者之間傳送的對象,也就是說從一個應用程序傳送到另一個應用程序。一個消息有三個主要部分:

消息頭(必須):包含用于識别和為消息尋找路由的操作設置。一組消息屬性(可選):包含額外的屬性,支持其他提供者和用戶的兼容。可以創建定制的字段和過濾器(消息選擇器)。一個消息體(可選):允許用戶創建五種類型的消息(文本消息,映射消息,字節消息,流消息和對象消息)。消息接口非常靈活,并提供了許多方式來定制消息的内容。

提供者

要使用Java消息服務,你必須要有一個JMS提供者,管理會話和隊列。既有開源的提供者也有專有的提供者。

開源的提供者包括:

Apache ActiveMQ

JBoss 社區所研發的 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

相關詞條

相關搜索

其它詞條