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應用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM