淺談JMS--(JMS 的簡介)

在公司快兩年了,也跟着團隊做了幾個項目;期間寫過很多個接口,有使用webServices的,也有JMS的。之前的文章說過了webService的接口,這次想簡單談談JMS,由於本身就屬於中的菜鳥,有不好的地方;請手下留情勿拍磚!

1.jms的定義

jms 即(java message service)java 消息服務,是一組 Java 應用程序接口,用以提供創建、發送、接收、讀取消息的服務。SUN 只提供接口,由不同的廠商根據該接口提供自己的實現。

2.JMS 的目標

更好地理解 JMS 有助於瞭解 JMS 規範的制定者設置的目標。現在,市場上有許多企業消息產品,生產這些產品的幾家公司也參與了 JMS 的開發。

現有的這些系統的能力和功能各不相同。這些制定者知道如果 JMS 結合所有現有系統的所有功能,那麼它會變得過於複雜。同樣,他們相信,他們也不能讓 JMS 只侷限於所有系統共有的那些特性。

制定者相信,讓 JMS 包括實現“高級的企業應用程序”所需要的所有功能是很重要的。

JMS 規範中聲明, JMS 的目標是:

  • 定義一組消息公用概念和實用工具。
  • 最少化程序員使用消息時必須學習的概念。
  • 最大化消息應用程序的可移植性。
  • 最小化實現一個提供者所需的工作量。
  • 爲點對點和 pub/sub 提供客戶機接口。“域”是用於在前面討論的消息模型的 JMS 術語。(注意:提供者不需要實現兩個域。)

3.jms的模式

    (1)點到點(point -to -point) ,

圖中 clientA-->clientC,clientA-->clientD 就是 點到點 的模式; 其中clientA 就是 生產者,C和D就是消費者;

使用這種模型,客戶端發送消息到隊列目的地(Queue),從這個隊列裏面只有一個消息接收者可以收到那個消息,其他訪問同一目的地的接收者不會接收到該消息

如clientC 從A那裏消費了msg1 消息後,D就不能消費同樣的消息了;所以clientD 消費Msg2。

點到點的模式主要特點就是:

① 每條消息只能有一個消費者(customer);一旦一條message被消費了之後,就不能被其他消費者接收。

②發送和接收消息和時間(時效)關係不大,但是要有一個前提就是:就是消息沒有過期,沒有被其他用戶接收走

③ 消費者必須確認消費被接收,否則JMS服務提供者會認爲該消息沒有被接收,那麼這條消息仍然可以被其他人接收。程序可以自動進行確認,不需要人工干預。

非持久的消息最多隻發送一次

⑤持久的消息嚴格發送一次

我們可以將比較重要的消息設置爲持久化的消息,持久化後的消息不會因爲JMS服務提供者的故障或者其他原因造成消息丟失。

(2)topic(pub/sub) 發佈訂閱模型

關於這個模型,可能比較熟悉;因爲之前在寫redis的高級應用的文章中有提過這個。如圖中的clientB --》clientE 和clientF 就是這個,就發佈者發佈的消息,可以

同時被多個訂閱者接收。

發佈/訂閱模型的特點:

①每個消息都可以有多個(0,1,……)訂閱者

②訂閱者只能消費他們訂閱之後出版的消息

這就要求訂閱者必須先訂閱,生產者再發布。即訂閱者必須先運行,再等待生產者的運行,這和點對點類型有所差異。

③訂閱者必須保持爲活動狀態才能使用這些消息

即訂閱者必須保持活動狀態等待發布者發佈的消息,如果訂閱者在發佈者發佈消息之後才運行,則不能獲得先前發佈者發佈的消息。

4.JMS的消息中間件

說到這裏要先解釋一下MOM?

面向消息中間件(mom)爲分佈式應用 系統開發提供異步,解耦,穩定,可擴展和安全的行爲。mom在分佈式計算領域是一個重要的概念。它允許應用

開發使用代理器api在分佈式應用 環境實現各種功能。總之,mom的設計原理就是作爲消息發送者和接收者的中間人使用。這個中間人提供了一個高級別的解耦。

而且由於jms是一個Java平臺中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,分佈式系統中發送消息,進行異步通信。Java消息服務是

一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。接下來就介紹下這幾種mom:

1).IBM MQ 系列產品提供的服務使得應用程序可以使用消息隊列進行交流,通過一系列基於 Java 的 API 提供了 MQseries 在 Java 中應用開發的方法。它支持點到點和發佈/訂閱兩種消息模式。

2).WebLogic是BEA公司實現的基於工業標準的J2EE應用服務器,支持大多數企業級JavaAPI,它完全兼容 JMS 規範,支持點到點和發佈/訂閱消息模式,它支持消息的多點廣播、持久消息存儲的文件和數據庫、XML 消息,以及動態創建持久隊列和主題。

3).JBoss 是 JBoss 公司開發的一個免費開源的應用服務器,它提供了 EJB 運行的環境,並能夠結合 EJB 進行 JMS 消息的收取,支持點到點模型和發佈/訂閱模型。
4).ActiveMQ 是一個基於 Apache 2.0 Licenced 發佈的開放源代碼的 JMS 產品,它能夠提供點到點消息模式和發佈/訂閱消息模式,支持 JBoss、Geronimo 等開源應用服務器,支持 Spring 框架的消息驅動,新增了一個 P2P 傳輸層,可以用於創建可靠的 P2P JMS 網絡連接,擁有消息持久化、事務、集羣支持等 JMS 基礎設施服務。
5).OpenJMS 是一個開源的 JMS 規範的實現,它支持點對點模型和發佈/訂閱模型,支持同步與異步消息發送、可視化管理界面,支持 Applet,能夠與 Jakarta Tomcat 這樣的 Servlet容器結合,支持 RMI、TCP、HTTP 與 SSL 協議。

我之前參與幾個項目中就用到IBM WebSphere MQ,以及activemq ;當然這些都是後話了。

5.jms 的接口

jms的接口如圖中所示,(以及jms的兩種模式繼承的接口):

JMS Parent

PTP Domain

Pub/Sub Domain

ConnectionFactory

QueueConnectionFactory

TopicConnectionFactory

Connection

QueueConnection

TopicConnection

Destination

Queue

Topic

Session

QueueSession

TopicSession

MessageProducer

QueueSender

TopicPublisher

MessageConsumer

QueueReceiver

TopicSubscriber

   jms接口的描述:

ConnectionFactory:連接工廠,JMS用它創建連接

ConnectionJMS 客戶端到JMS Provider 的連接

Destination:消息的目的地

Session:一個發送或接收消息的線程

MessageProducer (message的生產者)Session對象創建的用來發送消息的對象

MessageConsumer (message的消費者)Session對象創建的用來接收消息的對象

6.jms的消息

jms的消息由三模塊組成的: header(消息頭)、屬性、和body(消息實體)

消息頭:主要是設置消息的失效時間、提供發送和接收識別標識、消息路由等 :如header.setJMSMeassageId();

屬性:由消息發送者產生,用來添加刪除消息頭以外的附加信息。 名稱沒有限制,用戶可隨便定義;分三類:應用程序定義屬性、JMS定義屬性、提供者自定義屬性

消息實體: 發送到接收應用程序的內容。每一個消息接口都專用於它所支持的內容類型。JMS中定義了5種消息體:ByteMessageMapMessageObjectMessageStreamMessage TextMessage

7.jms開發編程實現

一個完整的jms 開發流程:

(1).通過 JNDI 查詢 ConnectionFactory

(2).通過 JNDI 查詢一個或者多個 Destination

(3).用 ConnectionFactory 創建一個Connection

(4).用 Connection 創建一個或者多個Session

(5)用 Session Destination 創建所需要的 MessageProducerMessageConsumer

(6)啓動 Connection


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章