06_Java通信_JMS_詳解消息

上節使用一個Chat的小例子說明了一下怎麼使用ActiveMQ開發一個發佈/訂閱者模型。

前期回顧:05_Java通信_JMS_demo

這節來詳細說一下一條消息的結構。


 

消息頭

每一個JMS的消息都有一個固定格式的消息頭,這些數據被提供set/get方法設置和獲取。但是不是所有的消息頭數據都需要設置,或者都能設置成功,部分是由JMS實現廠商設置好的。所以我們將這些消息頭分爲JMS自動分配消息頭和開發者設置消息頭。

下面是所有消息頭的列表:


 

JMS自動分配消息頭

JMSDestination:獲得對象標識目的地:Topic或者queue
JMSDeliveryMode:獲得消息的持久模式,如果是持久性,那麼JMS提供者出現故障,該消息不會丟失,在服務器恢復後再次傳送,非持久模式,如果JMS出現故障,該消息可能永久丟失
JMSMessageID:String類型的值,唯一標識一條消息
JMSTimestamp:在messageProducer在調用send()操作時自動設置,包含JMS提供者接收消息的時間
JMSExpiration:一個message對象的有效期,避免把過期的消息送給消費者
JMSRedelivered:消息被重新傳送給消費者,如果該消息被重新傳送JMSRedelivered消息頭就爲true,否則爲false
JMSPriority:消息的優先級0-4普通;5-9加急

 

開發者設置消息頭

JMSReplyTo:標明瞭JMS消費者應該應答的地址,在使用請求/應答模型時,通過這條消息頭屬性可以進一步實現生產者和消費者之間的去耦
JMSCorrelationID:用於將當前消息和先前的某些消息或者應用程序特定的ID關聯起來
JMSType:標識消息結構和有效負載類型

 

消息屬性

類似於消息頭的附加信息,允許開發者添加不透明的附加信息。
類型:

應用程序特定屬性

開發者提供,保存在message對象中,提供了多種類型的屬性。屬性如下



 

JMS定義的屬性

JMS廠商提供特定屬性

以上兩種都是廠商提供綁定在消息頭的附加信息

消息類型(有效負載)

Message接口是根據它們攜帶的有效負載種類來定義的
JMS提供了6個接口,來實現不同數據類型的負載



 PS:上面劃的是Message接口,其他5個都是類。其實其他5個也是接口!

TextMessage表示消息是一個文本格式
StreamMessage表示是流格式
MapMessage表示以鍵值對的形式傳遞消息
ObjectMessage消息的信息是一個對象,這個對象必須能夠序列化
ByteMessage表示消息是字節流作爲有效負載

  • 67a36481-cecf-3690-8b47-9810bda9ecfa-thumb.jpg
  • 大小: 20.9 KB
  • 04090c71-be9a-3b60-99c4-af5794ffcd67-thumb.jpg
  • 大小: 34.7 KB
  • eded685a-db10-397c-a6ac-37884238d49e-thumb.jpg
  • 大小: 36.5 KB
  • befe8872-8a74-3ac7-9b0a-5e3034a56771-thumb.jpg
  • 大小: 71.4 KB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章