維基百科,自由的百科全書php
Java消息服務(Java Message Service,JMS)應用程序接口是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通訊。Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。html
Java消息服務的規範包括兩種消息模式,點對點和發佈者/訂閱者。許多提供商支持這一通用框架所以,程序員能夠在他們的分佈式軟件中實現面向消息的操做,這些操做將具備不一樣面向消息中間件產品的可移植性。java
Java消息服務支持同步和異步的消息處理,在某些場景下,異步消息是必要的;在其餘場景下,異步消息比同步消息操做更加便利。程序員
Java消息服務支持面向事件的方法接收消息,事件驅動的程序設計如今被普遍認爲是一種富有成效的程序設計範例,程序員們都至關熟悉。web
在應用系統開發時,Java消息服務能夠推遲選擇面對消息中間件產品,也能夠在不一樣的面對消息中間件切換。api
[隱藏] 服務器
Java消息服務是一個在 Java標準化組織(JCP)內開發的標準(代號JSR 914)。2001年6月25日,Java消息服務發佈JMS 1.0.2b,2002年3月18日Java消息服務發佈 1.1,統一了消息域。架構
JMS由如下元素組成。併發
JMS提供者oracle
鏈接面向消息中間件的,JMS接口的一個實現。提供者能夠是Java平臺的JMS實現,也能夠是非Java平臺的面向消息中間件的適配器。
JMS客戶
生產或消費消息的基於Java的應用程序或對象。
JMS生產者
建立併發送消息的JMS客戶。
JMS消費者
接收消息的JMS客戶。
JMS消息
包括能夠在JMS客戶之間傳遞的數據的對象
JMS隊列
一個容納那些被髮送的等待閱讀的消息的區域。隊列暗示,這些消息將按照順序發送。一旦一個消息被閱讀,該消息將被從隊列中移走。
JMS主題
一種支持發送消息給多個訂閱者的機制。
Java消息服務應用程序結構支持兩種模型:
在點對點或隊列模型下,一個生產者向一個特定的隊列發佈消息,一個消費者從該隊列中讀取消息。這裏,生產者知道消費者的隊列,並直接將消息發送到消費者的隊列。這種模式被歸納爲:
發佈者/訂閱者模型支持向一個特定的消息主題發佈消息。0或多個訂閱者可能對接收來自特定消息主題的消息感興趣。在這種模型下,發佈者和訂閱者彼此不知道對方。這種模式比如是匿名公告板。這種模式被歸納爲:
使用Java語言,JMS提供了將應用與提供數據的傳輸層相分離的方式。同一組Java類能夠經過JNDI中關於提供者的信息,鏈接不一樣的JMS提供者。這一組類首先使用一個鏈接工廠以鏈接到隊列或主題,而後發送或發佈消息。在接收端,客戶接收或訂閱這些消息。
Java消息服務的API在javax.jms
包中提供。
ConnectionFactory
接口(鏈接工廠)[編輯]用戶用來建立到JMS提供者的鏈接的被管對象。JMS客戶經過可移植的接口訪問鏈接,這樣當下層的實現改變時,代碼不須要進行修改。 管理員在JNDI名字空間中配置鏈接工廠,這樣,JMS客戶纔可以查找到它們。根據消息類型的不一樣,用戶將使用隊列鏈接工廠,或者主題鏈接工廠。
Connection
接口(鏈接)[編輯]鏈接表明了應用程序和消息服務器之間的通訊鏈路。在得到了鏈接工廠後,就能夠建立一個與JMS提供者的鏈接。根據不一樣的鏈接類型,鏈接容許用戶建立會話,以發送和接收隊列和主題到目標。
Destination
接口(目標)[編輯]目標是一個包裝了消息目標標識符的被管對象,消息目標是指消息發佈和接收的地點,或者是隊列,或者是主題。JMS管理員建立這些對象,而後用戶經過JNDI發現它們。和鏈接工廠同樣,管理員能夠建立兩種類型的目標,點對點模型的隊列,以及發佈者/訂閱者模型的主題。
MessageConsumer
接口(消息消費者)[編輯]由會話建立的對象,用於接收發送到目標的消息。消費者能夠同步地(阻塞模式),或異步(非阻塞)接收隊列和主題類型的消息。
MessageProducer
接口(消息生產者)[編輯]由會話建立的對象,用於發送消息到目標。用戶能夠建立某個目標的發送者,也能夠建立一個通用的發送者,在發送消息時指定目標。
Message
接口(消息)[編輯]是在消費者和生產者之間傳送的對象,也就是說從一個應用程序創送到另外一個應用程序。一個消息有三個主要部分:
消息接口很是靈活,並提供了許多方式來定製消息的內容。
Session
接口(會話)[編輯]表示一個單線程的上下文,用於發送和接收消息。因爲會話是單線程的,因此消息是連續的,就是說消息是按照發送的順序一個一個接收的。會話的好處是它支持事務。若是用戶選擇了事務支持,會話上下文將保存一組消息,直到事務被提交才發送這些消息。在提交事務以前,用戶可使用回滾操做取消這些消息。一個會話容許用戶建立消息生產者來發送消息,建立消息消費者來接收消息。
要使用Java消息服務,你必需要有一個JMS提供者,管理會話和隊列。如今既有開源的提供者也有專有的提供者。
開源的提供者包括:
專有的提供者包括:
一個詳盡的JMS提供者對比矩陣能夠在這裏看到。
若是你計劃在一個服務器集羣中運行你的程序,你須要檢查提供者是否實現了對負載均衡和故障恢復的支持。