在JMS API中定義了五種消息體,通俗來講消息體也就是消息類型,我們可以使用不同的消息類型來發送與接收消息,消息體重包含了消息的核心數據。
我們可以將消息頭和消息屬性理解為信封,消息體理解為信紙。
五種消息體:
TextMessage:普通文本消息,數據為字符串。
<code>TextMessage msg = session.createTextMessage(); msg.setText("hello");/<code>
MapMessage:通過map來存放消息內容。定義了一系列對基本類型的的set/get方法,與StreamMessage不同的是,每個值都對應了一個相應的key,所以消息接收者不必按順序去讀取數據。
<code>MapMessage msg = session.createMapMessage(); msg.setString(“name”,”xiaoming”); msg.setInt(“age”,12);/<code>
BytesMessage:通過字節流來存放消息內容。
<code>byte[] data; BytesMessage msg = session.createBytesMessage(); msg.wirte(data);/<code>
StreamMessage:流式消息接口,其中定義了一系列的對基本類型的set/get方法,消息發送者可以通過這些方法寫入基本類型的數據,需要特別注意順序問題,消息接收者需要按發送者的寫入順序來讀取相應的數據。
<code>StringMessage msg = session.createStreamMessage(); msg.writeString(“xiaoming”); msg.writeInt(12);/<code>
ObjectMessage:將對象作為消息的接口,提供了一個set/get 對象的方法,需要注意的是隻能設置一個對象,需要注意的是這個對象可以是一個Collection,但必須是序列化的。
<code>ObjectMessage msg = session.createObjectMessage() setObject(Serializable s)/<code>
在以上五中消息體中,我們最常用的還是第一種,通過文本消息體來存放對象的json字符串,這種寫法幾乎滿足了我們九成以上的需求,筆者工作五六年還沒用過其他消息體,沒有業務場景。