Java訊息服務
Java 訊息服務(Java Message Service,JMS)應用程式介面是一个 Java 平台中關於訊息導向中介軟體(MOM)的 API,用佇咧兩个應用程式之間,抑是分散式系統中傳送的訊息,進行非同步通信。Java 訊息服務是一个佮具體平台無關係的 API,真大的多數 MOM 提供商攏著 JMS 提供支援。
Java 訊息服務的規範包括兩種訊息模式,著等佮發布者/訂閱者。真濟提供商支援這一通用框殼所致,程式設計師會當佇𪜶的分散式軟體中實現訊息導向的操作,遮的操作將具有無仝款的訊息導向中介軟體產品的可移植性。
Java 訊息服務支援同步佮非同步的訊息處理,佇咧某一寡場景下,仝一个訊息是必要的;佇其他的所在,非同步訊息比同步訊息操作更加利便。
Java 訊息服務支援面向事件的方法接收訊息,事件驅動的程式設計這馬予人廣泛認為是一種好額成效的程式設計範例,程式設計師攏誠熟似。
佇應用系統開發的時陣,Java 訊息服務會當推遲選擇面對訊息中介軟體產品,嘛會當佇無仝款的面對訊息中介軟體切換。
歷史
Java 訊息服務是一个佇咧 Java 標準化組織(JCP)內開發的標準(代號 JSR 九百十四矣)。 二空空一年六月二五,Java 訊息服務發布 JMS 一垺零 . 二 b,二空空二年三月十八 Java 訊息服務發布一又閣一,統一了訊息域。
體系架構
JMS 元素
JMS 由以下元素組成。
JMS 提供者
- 連接訊息導向中介軟體的,JMS 介面的一个實現。提供者會當是 Java 平台的 JMS 實現,嘛會當是非 Java 平台的訊息導向中介軟體的配接器。
JMS 客戶
- 生產抑是消費訊息的拍算 Java 的應用程式抑是物件。
JMS 生產者
- 建立並行送訊息的 JMS 客戶。
JMS 消費者
- 接收訊息的 JMS 客戶。
JMS 訊息
- 包括會當佇 JMS 客戶中間傳遞的資料的物件
JMS 在列
- 一个容納遐的予傳送的等待閱讀的訊息的區域。在列暗示,這寡訊息會照順序傳送。一旦一个訊息予人閱讀,該訊息將被列中徙走。
JMS 主題
- 一種支援傳送訊息予濟个訂閱者的機制。
JMS 模型
Java 訊息服務應用程式結構支援兩種模型:
- 著等抑是講列模型
- 發布 / 訂閱模型在著等抑是列模型下,一个生產者向一个特定的佇列發布訊息,一个消費者自本佇咧列中讀取訊息。遮,生產者知影消費者的在列,閣直接將訊息傳送到消費者的佇咧列。這種模式被概括做:
- 只有一个消費者將得著訊息
- 生產者無需要佇咧接收者消費這个訊息期間也若執行狀態,接收者嘛仝款無需要佇訊息傳送的時陣佇執行狀態。
- 每一个成功處理的訊息攏由接收者簽收發布者/訂閱者模型支援向一个特定的訊息主題發佈訊息。零抑是濟濟訂閱者可能對接收來自特定訊息主題的訊息感興趣。佇這種模型下,發布者佮訂閱者彼此毋知影對方。這種模式就是較好比是匿名公告板。這種模式被概括做:
- 加一个消費者會當得著訊息
- 佇咧發布者佮訂閱者之間存在時間依賴性。發布者需要建立一个訂閱(subscription), 以便客戶會當訂閱。訂閱者著愛保持持續的活動狀態以接收訊息,除非訂閱者建立久長的訂閱。佇彼種情形下,佇咧訂閱者無連接時發布的訊息將佇咧訂閱者重新連接時重新發布。
使用 Java 語言,JMS 提供了將應用佮提供資料的傳輸層相分離的方式。仝一組的 Java 類會當過 JNDI 中關於提供者,連接無仝的 JMS 提供者。這組類首先使用一个連接工場以連接到佇列或者是主題,傳送抑是發佈訊息。佇咧接收端,客戶接收抑是訂閱遮的訊息。
JMS 應用程式介面
Java 訊息服務的 API 佇咧 ` javax . jms ` 包裝的提供乎。
` ConnectionFactory ` 介面(連接工場)
使用者用來建立著 JMS 提供者著的連接的被管物件。JMS 客戶通過會當徙栽的介面存取連接,當下層的實現改變的時陣,代碼毋免進行修改。管理員佇咧 JNDI 號名空間中組態連接工場,按呢乎,JMS 客戶才會當揣著𪜶。根據訊息類型的無仝,使用者將使用在列連接工場,抑是主題連接工場。
` Connection ` 介面(連接)
連接代表了應用程式和訊息侍服器之間的通信鍊路。佇得著連接工場了後,就會當建立一个佮 JMS 提供者接紲。根據無仝的連接類型,連接允准使用者建立對談,以傳送佮接收佇咧列佮主題到目標。
` Destination ` 介面(目標)
目標是一个包裝訊息目標識別碼的予管物件,訊息目標是指訊息發佈佮接收的地點,抑是咧列,或者是主題。JMS 管理員建立遮的物件,然後使用者通過 JNDI 發現𪜶。佮連接工廠仝款,管理員會當建立兩種類型的目標,從等模型的在列,佮發布者/訂閱者模型的主題。
` MessageConsumer ` 介面(訊息消費者)
由對談建立的東西,用佇接收傳送到目標的訊息。消費者會當仝步閣來(阻塞模式), 抑是非同步(非常的窒)接收佇列佮主題類型的訊息。
` MessageProducer ` 介面(訊息生產者)
由對談建立的東西,用佇傳送的訊息來到目標。使用者會當建立某一个目標的傳送者,嘛會當建立一个通用的傳送者,佇傳送訊息時陣指定目標。
` Message ` 介面(訊息)
是佇消費者佮生產者之間傳送的物件,也就是講對一个應用程式創送到另外一个應用程式。有一个訊息三个主要的部份:
一 . 訊息頭(著愛): 包含用於辨識佮為訊息走揣路由的操作設定。 二 . 一組訊息屬性(通選): 包含額外的屬性,支援其他提供者佮使用者的相容。會使建立客製化的欄位佮過濾器(訊息選擇器)。 三 . 一个訊息體(通選): 允准使用者建立五種類型的訊息(文字訊息,嘿映訊息,位元組訊息,流訊息佮物件訊息)。
訊息介面非常的靈活,閣提供誠濟方式來客製化訊息的內容。
` Session ` 介面(對談)
表示一个單執行緒的上下文,用佇傳送佮接收訊息。因為對談是單執行緒的,所以訊息是連紲的,就是講訊息是按照傳送的順序一个一个接收的。對談的好處是伊支援事務。若使用者選擇事務來支援,對講頂下文欲儉一个訊息,一直到事務予人提交才傳送遮的訊息。佇咧提交事務進前,使用者會當使用回滾操作取消遮的訊息。一个對談允准使用者建立訊息生產者來傳送訊息,建立訊息消費者來接收訊息。
JMS 提供者實現
愛使用 Java 訊息服務,你必須愛有一个 JMS 提供者,管理對談佮在列。這馬既然有開源的提供者嘛有專有的提供者。
開源的提供者包括:
- Kafka
- Apache ActiveMQ
- JBoss 社區所研發的 HornetQ
- Joram
- Coridan 的 MantaRay
- The OpenJMS Group 的 OpenJMS
專有的提供者包括:
- BEA 的 BEA WebLogic Server JMS
- TIBCO 軟體公司的 EMS
- GigaSpaces Technologies 的 GigaSpaces
- Softwired 二千空六的 iBus
- IONA Technologies 的 IONA JMS
- SeeBeyond 的 IQManager(二空空五年八月被 Sun Microsystems 併購)
- webMethods 的 JMS +-http : / / www . webmethods . com
- my-channels 的 Nirvana
- Sonic Software 的 SonicMQ
- IBM 的 WebSphere MQ
一个詳盡的 JMS 提供者對比矩陣會當踮遮看著。
若是你計畫佇咧一个侍服器欉集中執行你的程式,你需要檢查提供者敢是實現了對負載均衡和故障恢復的支援。
參見
- J 二 EE 連接器架構
- J 二 EE
- JDBC
- 訊息導向中介軟體
- 企業應用整合
外部連結
- Sun's JMS Overview
- JSR 九百十四矣 ( JMS 一垺零 and 一孵一 )
- GigaSpaces Technologies JavaSpaces approach to JMS