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表示消息是字节流作为有效负载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值