004.JMS消息結構

JMS的消息結構相似於HTTP請求的結構分爲三部分:java

  • 消息頭
  • 消息屬性
  • 消息體

下面分別說明三部分的內容標準。服務器

1. 消息頭

消息頭包含消息的識別信息和路由信息,其標準屬性以下:
下面介紹的參數均可以經過Message對象進行設置。ide

1.1. 能夠經過producersend方法快捷設置的參數

  • JMSDestination:消息發送的目的地,主要是指Queue和Topic,自動分配。
  • JMSDeliveryMode:傳送模式,分爲兩種:持久模式和非持久模式。一條持久性的消息應該被傳送「一次且僅僅一次」,這就意味着若是JMS提供者出現故障,該消息並不會丟失,他會在服務器恢復以後再次傳遞;一條非持久性的消息最多會傳遞一次,這意味着服務器出現故障,該消息將永遠丟失,自動分配。
  • JMSExpiration:消息過時時間,等於producersend方法中的timeToLive值加上發送時刻的GMT時間值,若是timeToLive值等於0,則JMSExpiration被設爲0,表示該消息永不過時,若是發送後,在消息過時時間以後消息尚未被髮送到目的地,則該消息被清除。自動分配。
  • JMSPriority:消息優先級,從0-9十個級別,0-4是普通消息,5-9是甲基消息,JMS不要求JMS Provider嚴格按照這十個優先級發送消息,但必須保證加急消息要先於普通消息到達,默認是4級,自動分配。

1.2.其餘參數

  • JMSMessageID:惟一識別每一個消息的標識,由JMS Provider產生,自動分配。
  • JMSTimestamp:一個JMS Provider在調用send方法時自動設置的,它是消息被髮送和消費者實際接收的時間差,自動分配。
  • JMSCorrelationID:用來鏈接到另一個消息,典型的應用是在回覆消息中鏈接到原消息,在大多數狀況下,JMSCorrelationID用於將一條消息標記爲對JMSMessageID標示的上一條消息的應答。不過,JMSCorrelationID能夠是任何值,不單單是JMSMessageID,由開發者設置。
  • JMSReplyTo:提供本消息回覆消息的目的地址,由開發者設置;
  • JMSType:消息類型的識別符,由開發者設置;
  • JMSRedelivered:若是一個客戶端收到了一個設置了JMSRedelivered屬性的消息,則表示可能客戶端曾經在某些時候收到過該消息,但並無簽收(Acknowledge),若是該消息被從新傳送,JMSRedelivered=true,反之JMSRedelivered=false,自動設置。

2. 消息體結構

JSM標準API定了5種消息體格式,也叫消息類型,可使用不一樣形式發送接收數據,並能夠兼容現有的消息格式。包括:TextMessage、MapMessage、BytesMessage、StreamMessage和ObjectMessage。code

3. 消息屬性

其本質上就是key-value鍵值對。
消息屬性包含如下三種類型:對象

3.1. 應用程序設置和添加的屬性

value能夠是各類不一樣的類型,用來給消息添加附加屬性,經過Message對象設置。好比:事務

message.setStringProperty("username", username);

3.2. JMS定義的屬性

其特色是key使用"JMSX"做爲屬性的前綴,屬於JMS的標準屬性。路由

//經過該方法獲取全部鏈接支持的JMSX屬性的名字
connection.getMetaData().getJMSXPropertyNames();

經常使用的有哪些呢,咱們列舉說明一下:開發

  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。由提供商設置。

3.3. JMS Provider特定的屬性

這種屬性由於綁定到了某一具體的Provider上,因此儘可能少用。get

相關文章
相關標籤/搜索