JMS学习(三)JMS 消息结构之属性及消息体详解
一、前言
通過上一篇的學習我們知道了消息分為三個部分,即消息頭,屬性及消息體,并對消息頭的十個屬性進行了詳細的介紹,本文再對消息屬性及消息體進行詳細的介紹。
二、屬性介紹
消息屬性的主要作用是可以對頭信息進行一個額外的補充,畢竟消息頭信息一是有限,二是很多不能由應用程序設定。通常,消息屬性可以用在消息選擇器的表達式里,結合起來實現對消息的過濾。
消息屬性的值只能是基本的類型,或者這些基本類型對應的包裝類型。也就是說,不能將一個自定義的對象作為屬性值。通常情況下,如果能夠放在body里的內容,就不必放在消息屬性里。
消息屬性按類型可以分為標準屬性(JMSX作為前綴),消息組件自定義的屬性(JMS_作為前綴),以及應用自定義的屬性。自定義的屬性不要以前面兩種為前綴。
標準的JMSX屬性如下表:
其中,JMSXGroupID和JMSGroupSeq是客戶端可以設置的。消息的屬性一旦設置,且消息發送后,就會變成只讀的,將不能再被修改。
跟頭信息的設置不同的是,對于這些標準屬性,JMS并不要求消息中間件必須設置這些屬性,所以這些屬性的值可能是存在的,也可能為空,而且經測試大部分的標準屬性都可以由應用程序自行設置,就像自定義的屬性一樣。
三、消息體
為了適應不同場景下的消息,提高消息存儲的靈活性,JMS定義了幾種具體類型的消息,不同的子類型的消息體也不一樣,需要注意的是,Message接口并沒有提供一個統一的getBody之類的方法。消息子接口定義如下:
1)TextMessage: 最簡單的消息接口,用于發送文本類的消息,設置/獲取其body的方法定義如下setText()/getText().
2)StreamMessage: 流式消息接口,里面定義了一系列的對基本類型的set/get方法,消息發送者可以通過這些方法寫入基本類型的數據,消息接收者需要按發送者的寫入順序來讀取相應的數據。
3)MapMessage:把消息內容存儲在Map里,本接口定義了一系列對基本類型的的set/get方法,與StreamMessage不同的是,每個值都對應了一個相應的key,所以消息接收者不必按順序去讀取數據。
4)ObjectMessage: 將對象作為消息的接口,提供了一個set/get 對象的方法,需要注意的是只能設置一個對象,這個對象可以是一個Collection,但必須是序列化的。
5)BytesMessage:以字節的形式來傳遞消息的接口,除了提供了對基本類型的set/get,還提供了按字節方式進行set/get。
三、小結
消息屬性是對消息頭信息的一種補充,相對來說更加靈活,通常情況下,我們不應該依賴標準的屬性值,如果應用需要,我們也應該自定義所需要的屬性值。
JMS提供的5種子消息接口讓我們在發送消息時有了更多的選擇,可以根據應用的實際需要來選擇對應的子接口。
總結
以上是生活随笔為你收集整理的JMS学习(三)JMS 消息结构之属性及消息体详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP CRM WebClient UI
- 下一篇: how to find data sou