1. 程式人生 > >訊息中介軟體系列-JMS基本概念和模型

訊息中介軟體系列-JMS基本概念和模型

一、定義:

JMS 全稱:Java Message Service,Java訊息服務,是Java EE中的一個技術,它定義了Java 中訪問訊息中介軟體的介面,並沒有給予實現,實現JMS介面的訊息中介軟體成為JMS Provider,例如:Active MQ

二、訊息模型:

○ Point-to-Point(P2P)
○ Publish/Subscribe(Pub/Sub)
即點對點和釋出訂閱模型

三、P2P

定義:Point to Point  傳送者和接收者中有一個訊息佇列(messages quene),傳送者傳送訊息則把訊息加入到佇列中,接收者接收訊息則把訊息從佇列中取出;如果接收者沒有接收,則這條訊息永遠儲存在佇列中(除非已過期)。如下圖:


特點:

  A、每條訊息只能有一個接收者

 B、傳送者和接收者之間可以非同步(no timing dependencies)

          C、接收者成功接收答覆機制

如果你希望傳送的每個訊息都應該被成功處理的話,那麼你需要P2P模式。

四、PUB/SUB(釋出訂閱模式)

定義:傳送者把訊息掛在一個主題下(類似電子公告板),接收者先訂閱這個主題,當這個主題有新訊息釋出時,接收者就可以接收這個主題下的訊息了,這個訊息一直保持到所有訂閱這個訊息的人(線上的)都接收了才刪除。如圖:


特點:

 A、一條訊息可以有多個接收者接收

         B、接收者和傳送者之間必須同步。

為了彌補這種型別的時間依賴(timing dependencies)劣勢,JMS API 提供了建立持久訂閱的機制,這樣不管接收者是否線上,傳送者都可以傳送,接收者也可以接收。

五、JMS API程式設計介紹

類圖:


API介紹:

(1) ConnectionFactory

建立Connection物件的工廠,針對兩種不同的jms訊息模型,分別有QueueConnectionFactory和TopicConnectionFactory兩種。可以通過JNDI來查詢ConnectionFactory物件。

(2) Destination

Destination的意思是訊息生產者的訊息傳送目標或者說訊息消費者的訊息來源。對於訊息生產者來說,它的Destination是某個佇列(Queue)或某個主題(Topic);對於訊息消費者來說,它的Destination也是某個佇列或主題(即訊息來源)。

所以,Destination實際上就是兩種型別的物件:Queue、Topic可以通過JNDI來查詢Destination。

(3) Connection

Connection表示在客戶端和JMS系統之間建立的連結(對TCP/IP socket的包裝)。Connection可以產生一個或多個Session。跟ConnectionFactory一樣,Connection也有兩種型別:QueueConnection和TopicConnection。

(4) Session

Session是我們操作訊息的介面。可以通過session建立生產者、消費者、訊息等。Session提供了事務的功能。當我們需要使用session傳送/接收多個訊息時,可以將這些傳送/接收動作放到一個事務中。同樣,也分QueueSession和TopicSession。

(5) 訊息的生產者

訊息生產者由Session建立,並用於將訊息傳送到Destination。同樣,訊息生產者分兩種型別:QueueSender和TopicPublisher。可以呼叫訊息生產者的方法(send或publish方法)傳送訊息。

(6) 訊息消費者

訊息消費者由Session建立,用於接收被髮送到Destination的訊息。兩種型別:QueueReceiver和TopicSubscriber。可分別通過session的createReceiver(Queue)或createSubscriber(Topic)來建立。當然,也可以session的creatDurableSubscriber方法來建立持久化的訂閱者。

(7) MessageListener

訊息監聽器。如果註冊了訊息監聽器,一旦訊息到達,將自動呼叫監聽器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一種MessageListener。

JMS可以解決那些問題:

1)同步通訊:客戶發出呼叫後,必須等待服務物件完成處理並返回結果後才能繼續執行;(2)客戶和服務物件的生命週期緊密耦合:客戶程序和服務物件程序都必須正常執行;如果由於服務物件崩潰或者網路故障導致客戶的請求不可達,客戶會接收到異常;(3)點對點通訊:客戶的一次呼叫只發送給某個單獨的目標物件。

作者:scgyus