1.  JMS消息有以下幾部分組成:消息頭、屬性和消息體

2.  消息頭包含消息的識別信息和路由信息,消息頭包含的一些屬性如下:

  1. JMSDestination:由send方法設置
  2. JMSDeliveryMode: 由send方法設置
  3. JMSExpiration:由send方法設置
  4. JMSPriority:由send方法設置
  5. JMSMessageId: 由send方法設置
  6. JMSTimestamp:由客户端設置
  7. JMSCorrelationId:由客户端設置
  8. JMSReplyTo: 由客户端設置
  9. JMSType: 由客户端設置
  10. JMSRedelivered:由JMS provider設置

3. 標準的JMS消息頭包含以下屬性:

  1. JMSDestination:消息發送的目的地。主要是指Queue和topic,自動分配
  2. JMSDeliveryMode:傳送模式。有兩種:持久模式和非持久模式。一條持久性的消息應該被傳送“一次僅僅一次”,這就意味着如果JMS提供者出現故障,JMS消息不會丟失,它會在服務器恢復之後繼續傳遞。一條非持久性的消息最多會傳遞一次,這就意味着服務器出現故障,該消息永久丟失。
  3. JMSExpiration:消息過期時間。等於Destination的send方法中的timeToLive值加上發送時刻的GMT時間值。如果timeToLive值等於零,則JMSExpiration被設置為零,表示該消息永不過期。如果發送後,在消息過期時間之後消息還沒有被髮送到目的地,則該消息被清除。自動分配
  4. JMSPriority:消息優先級。從0-9十級,0-4是普通消息,5-9是加急消息。JMS不要求JMS provider嚴格按照這十個優先級發送消息,但必須保證加急消息要優先於普通消息到達目的地。默認是4級。自動分配
  5. JMSMessageId:唯一識別每個消息的標誌,由JMS provider產生,自動分配
  6. JMSTimestamp:一個JMS provider在調用send()自動設置的,它是消息被髮送和接收的實際時間差。自動分配
  7. JMSCorrelationId:用來連接到另外一個消息。典型的應用在回覆消息連接到原消息。在大多數情況下,JMSCorrelationId用於將一條消息標記為對JMSMessageId標識上的一個消息的應答。不過JMSCorrelationId是任何值不一定是JMSMessageId,有開發者設置
  8. JMSReplyTo:提供本消息回覆消息的目的地,有開發者設置
  9. JMSType:消息類別的識別符。有開發者設置

        10.JMSRedelivered:如果一個客户端端收到了設置了JMSRedelivered屬性的消息,則表示客户端可能在早些時候曾經收到過該消息,但並沒有被簽收(acknowledge)。如果該消息重新發送,JMSRedelivered = true 反之 JMSRedelivered = false,自動設置

4.  消息體,JMS API 定義了5中消息體格式,也叫消息類型,可採用不同的形式發送接收數據,並可以兼容現有的消息格式。包括:TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage。

5.  消息屬性,包含以下三種類型的屬性:

    1.應用程序設置或添加的屬性

      Message.setStringProperty("name", name)

    2.JMS定義的屬性

      使用“JMSX”作為屬性的前綴

      Connection.getMetaData().JMSXPropertyNames(),方法返回所有支持的JMSX的屬性名稱

    3.JMS提供商特定的屬性

6. JMS定義的屬性如下:

  1. JMSXUserID:發送消息的用户標識。發送時提供商設置
  2. JMSXAppID:發送消息的應用標識。發送時提供商設置
  3. JMSXDeliveryCount:轉發消息重試次數。第一次是1,第二次是2,……,發送時提供商設置
  4. JMSXGroupID:消息所在消息組的標識,客户端設置
  5. JMSXGroupSeq:組內消息的序號,第一個是1,第二個是2,……,客户端設置
  6. JMSXProducerTXID:產生消息的事務的事務標識,發送時提供商設置
  7. JMSXConsumerTXID:消費消息的事務的事務標識,接收時提供商設置
  8. JMSXRcvTimestamp:JMS轉發消息到消費者的時間,接收時提供商設置
  9. JMSXState:假定存在一個消息倉庫,它儲存了每個消息的單獨拷貝,且這些消息從原始消息發送開始,每個拷貝的狀態有:1(等待)、2(準備)、3(到期)或4(保留)。由於狀態與生產者和消費者無關,所以它不是由它們來提供,它只和在倉庫中查找消息相關,因此JMS消息沒有提供相關的API,所以由提供商設置