Java消息服務-JMS

Java消息服務[編輯]

維基百科,自由的百科全書php

Java消息服務Java Message ServiceJMS應用程序接口是一個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由如下元素組成。併發

JMS提供者oracle

鏈接面向消息中間件的,JMS接口的一個實現。提供者能夠是Java平臺的JMS實現,也能夠是非Java平臺的面向消息中間件的適配器。

JMS客戶

生產或消費消息的基於Java的應用程序或對象。

JMS生產者

建立併發送消息的JMS客戶。

JMS消費者

接收消息的JMS客戶。

JMS消息

包括能夠在JMS客戶之間傳遞的數據的對象

JMS隊列

一個容納那些被髮送的等待閱讀的消息的區域。隊列暗示,這些消息將按照順序發送。一旦一個消息被閱讀,該消息將被從隊列中移走。

JMS主題

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

JMS模型[編輯]

Java消息服務應用程序結構支持兩種模型:

在點對點或隊列模型下,一個生產者向一個特定的隊列發佈消息,一個消費者從該隊列中讀取消息。這裏,生產者知道消費者的隊列,並直接將消息發送到消費者的隊列。這種模式被歸納爲:

  • 只有一個消費者將得到消息
  • 生產者不須要在接收者消費該消息期間處於運行狀態,接收者也一樣不須要在消息發送時處於運行狀態。
  • 每個成功處理的消息都由接收者簽收

發佈者/訂閱者模型支持向一個特定的消息主題發佈消息。0或多個訂閱者可能對接收來自特定消息主題的消息感興趣。在這種模型下,發佈者和訂閱者彼此不知道對方。這種模式比如是匿名公告板。這種模式被歸納爲:

  • 多個消費者能夠得到消息
  • 在發佈者和訂閱者之間存在時間依賴性。發佈者須要創建一個訂閱(subscription),以便客戶可以購訂閱。訂閱者必須保持持續的活動狀態以接收消息,除非訂閱者創建了持久的訂閱。在那種狀況下,在訂閱者未鏈接時發佈的消息將在訂閱者從新鏈接時從新發布。

使用Java語言,JMS提供了將應用與提供數據的傳輸層相分離的方式。同一組Java能夠經過JNDI中關於提供者的信息,鏈接不一樣的JMS提供者。這一組類首先使用一個鏈接工廠以鏈接到隊列或主題,而後發送或發佈消息。在接收端,客戶接收或訂閱這些消息。

JMS應用程序接口[編輯]

Java消息服務的API在javax.jms包中提供。

ConnectionFactory 接口(鏈接工廠)[編輯]

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

Connection 接口(鏈接)[編輯]

鏈接表明了應用程序和消息服務器之間的通訊鏈路。在得到了鏈接工廠後,就能夠建立一個與JMS提供者的鏈接。根據不一樣的鏈接類型,鏈接容許用戶建立會話,以發送和接收隊列和主題到目標。

Destination 接口(目標)[編輯]

目標是一個包裝了消息目標標識符的被管對象,消息目標是指消息發佈和接收的地點,或者是隊列,或者是主題。JMS管理員建立這些對象,而後用戶經過JNDI發現它們。和鏈接工廠同樣,管理員能夠建立兩種類型的目標,點對點模型的隊列,以及發佈者/訂閱者模型的主題。

MessageConsumer 接口(消息消費者)[編輯]

由會話建立的對象,用於接收發送到目標的消息。消費者能夠同步地(阻塞模式),或異步(非阻塞)接收隊列和主題類型的消息。

MessageProducer 接口(消息生產者)[編輯]

由會話建立的對象,用於發送消息到目標。用戶能夠建立某個目標的發送者,也能夠建立一個通用的發送者,在發送消息時指定目標。

Message 接口(消息)[編輯]

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

  1. 消息頭(必須):包含用於識別和爲消息尋找路由的操做設置。
  2. 一組消息屬性(可選):包含額外的屬性,支持其餘提供者和用戶的兼容。能夠建立定製的字段和過濾器(消息選擇器)。
  3. 一個消息體(可選):容許用戶建立五種類型的消息(文本消息,映射消息,字節消息,流消息和對象消息)。

消息接口很是靈活,並提供了許多方式來定製消息的內容。

Session 接口(會話)[編輯]

表示一個單線程的上下文,用於發送和接收消息。因爲會話是單線程的,因此消息是連續的,就是說消息是按照發送的順序一個一個接收的。會話的好處是它支持事務。若是用戶選擇了事務支持,會話上下文將保存一組消息,直到事務被提交才發送這些消息。在提交事務以前,用戶可使用回滾操做取消這些消息。一個會話容許用戶建立消息生產者來發送消息,建立消息消費者來接收消息。

JMS提供者實現[編輯]

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

開源的提供者包括:

專有的提供者包括:

一個詳盡的JMS提供者對比矩陣能夠在這裏看到。

若是你計劃在一個服務器集羣中運行你的程序,你須要檢查提供者是否實現了對負載均衡和故障恢復的支持。

參見[編輯]

外部連接[編輯]

相關文章
相關標籤/搜索