1. 程式人生 > >JMS基本概念和模型

JMS基本概念和模型

 

 -------------------------------------------------------------------------------------------

JMS是什麼   JMS 全稱:Java Message Service,Java訊息服務,是Java EE中的一個技術。

JMS規範

  JMS定義了Java 中訪問訊息中介軟體的介面,並沒有給予實現,實現JMS介面的訊息中介軟體成為JMS Provider,例如:Active MQ

JMS Provider

  實現JMS介面和規範的訊息中介軟體

JMS message

JMS的訊息,JMS訊息由三部分組成:訊息頭、訊息屬性、訊息體

  訊息頭包含訊息的識別訊息和路由訊息,訊息頭包含一些標準的屬性如下:

   (1)JMSDestination: 訊息傳送的目的地,主要是指Queue和Topic,由send方法設定.

   (2)JMSDeliveryMode:傳送模式。有兩種:持久模式非持久模式。一條永續性的訊息應該被傳輸"一次僅僅一次",這就意味著如果JMS提供者出現故障,該訊息並不會丟失,它會在伺服器恢復之後再次傳遞。一條非持久的訊息最多會傳遞一次,這意味著伺服器出現故障,該訊息將永遠丟失。由send方法設定

   (3)JMSExpiration:訊息過期時間,等於Destination的send方法中的timeToLive值加上傳送時刻的GMT的時間值。如果timeToLive值等於零,則JMSExpiration被設定為零,表示該訊息永不過期。如果傳送後,在訊息過期時間之後訊息還沒有被髮送到目的地,則該訊息被清除。由send方法設定

   (4)JMSPriority:訊息優先順序,從0-9十個級別,0-4是普通訊息,5-9是加急訊息。JMS不要求JMS Provider嚴格按照這十個優先順序傳送訊息,但必須保證加急訊息要先於普通訊息到達,預設是4級。由send方法設定

   (5)JMSMessageID:唯一識別每個訊息的標識,由JMS Provider產生。由send方法設定

   (6)JMSTimestamp:一個JMS Provider在呼叫send()方法時自動設定,它是訊息被髮送和消費者實際接收的時間差。由客戶端設定

   (7)JMSCorrelationID:用來連線到另外一個訊息,典型的應用是在回覆訊息中連線到原訊息。在大多數情況下,JMSCorrelationID用於將一條訊息標記為對JMSMessageID標示的上一條訊息的應答,不過,JMSCorrelationID可以是任何值,不僅僅是JMSMessageID。由客戶端設定

   (8)JMSType: 訊息型別的識別符號,由客戶端設定

   (9)JMSReplyTo: 提供本訊息回覆訊息的目的地址,由客戶端設定

   (10)JMSRedelivered:如果一個客戶端收到一個設定了JMSRedelivered屬性的訊息,則表示可能客戶端曾經在早些時候收到過該訊息,但並沒有簽收(acknowledged)。如果該訊息被重新傳送,JMSRedelivered=true 否則 JMSRedelivered=flase 。由JMS Provider設定

  訊息體,JMS API定義了5種訊息體格式,也叫訊息型別,可以使用不同形式傳送接收資料,並可以相容現有的訊息格式。

    包括:TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage

  訊息屬性,包含以下三種類型的屬性:

    1.應用程式設定和新增的資料,比如:message.setStringProperty("userName",userName);

    2.JMS定義的屬性,使用"JMSX"作為屬性名的字首, connection.getMetaData().getJMSXPropertyNames() 方法返回所有連線支援的JMSX屬性的名字。

    3.JMS供應商特定的屬性

JMS producer

  訊息生產者,建立和傳送JMS訊息的客戶端應用

JMS consumer

  訊息消費者,建立和處理JMS訊息的客戶端應用

JMS domains: 訊息傳遞域

JMS規範中定義了兩種訊息傳遞域: 點對點(point-to-point,簡寫成PTP);訊息傳遞域和釋出/訂閱訊息傳遞域(publish/subscribe,簡寫成pub/sub)

  1.點對點訊息傳遞域的特點如下:

   a.每個訊息只能有一個消費者

   b.訊息的生產者和消費者之間沒有時間上的相關性。無論消費者在生產者傳送訊息的時候是否處於執行狀態,它都可以提取訊息。

      

  2.釋出/訂閱訊息傳遞域的特點如下:

    a.每個訊息可以有多個消費者

    b.生產者和消費者之間有時間上的相關性。訂閱一個主題的消費者只能消費自它訂閱之後釋出的訊息。JMS規範允許客戶建立持久訂閱,這在一定程度上放鬆了時間上的相關性要求。持久訂閱允許消費者消費它在未處於啟用狀態時傳送的訊息。

    

  3.在點對點訊息傳遞域中,目的地被稱為佇列(queue);在釋出/訂閱訊息傳遞域中,目的地被稱為主題(topic)

Connection factory: 連線工廠,用來建立連線物件,以連線到JMS的provider

JMS Connection: 封裝了客戶與JMS提供者之間的一個虛擬的連線JMS Session: 是生產和消費訊息的一個單執行緒上下文 會話用於建立訊息生產者(producer)、訊息消費者(consumer)和訊息(message)等。會話提供了一個事務性的上下文,在這個上下文中,一組傳送和接收被組合到了一個原子操作中。Destination:訊息傳送到的目的地Acknowledge:簽收Transaction:事務JMS client: 用來收發訊息的Java應用