JMS的消息結構相似於HTTP請求的結構分爲三部分:java
下面分別說明三部分的內容標準。服務器
1. 消息頭
消息頭包含消息的識別信息和路由信息,其標準屬性以下:
下面介紹的參數均可以經過Message
對象進行設置。ide
1.1. 能夠經過producer
的send
方法快捷設置的參數
- JMSDestination:消息發送的目的地,主要是指Queue和Topic,自動分配。
- JMSDeliveryMode:傳送模式,分爲兩種:持久模式和非持久模式。一條持久性的消息應該被傳送「一次且僅僅一次」,這就意味着若是JMS提供者出現故障,該消息並不會丟失,他會在服務器恢復以後再次傳遞;一條非持久性的消息最多會傳遞一次,這意味着服務器出現故障,該消息將永遠丟失,自動分配。
- JMSExpiration:消息過時時間,等於
producer
的send
方法中的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();
經常使用的有哪些呢,咱們列舉說明一下:開發
- JMSXUserID:發送消息的用戶標識,發送時提供商設置;
- JMSXAppID:發送消息的應用標識,發送時提供商設置;
- JMSXDeliveryCount:轉發消息重試次數,第一次是1,第二次是2,… ,發送時提供商設置;
- JMSXGroupID:消息所在消息組的標識,由客戶端設置;
- JMSXGroupSeq:組內消息的序號第一個消息是1,第二個是2,…,由客戶端設置;
- JMSXProducerTXID :產生消息的事務的事務標識,發送時提供商設置;
- JMSXConsumerTXID :消費消息的事務的事務標識,接收時提供商設置;
- JMSXRcvTimestamp :JMS 轉發消息到消費者的時間,接收時提供商設置;
- JMSXState:假定存在一個消息倉庫,它存儲了每一個消息的單獨拷貝,且這些消息從原始消息被髮送時開始。每一個拷貝的狀態有:1(等待),2(準備),3(到期)或4(保留)。因爲狀態與生產者和消費者無關,因此它不是由它們來提供。它只和在倉庫中查找消息相關,所以JMS沒有提供這種API。由提供商設置。
3.3. JMS Provider特定的屬性
這種屬性由於綁定到了某一具體的Provider上,因此儘可能少用。get