JMS(JavaMessageService)JMS的组成特点
JMSprovider
实现JMS接口和规范的消息中间件,也就是我们的MQ服务器
JMSproducer
消息生产者创建和发送JMS消息的客户端应用
JMSconsumer
消息消费者,接收和处理JMS消息的客户端应用
JMSmessage
消息头
JMSDestination
消息发送的目的地,主要是指Queue和Topic
JMSDeliverMode
持久模式和非持久模式
一条持久性的消息:应该被传送"一次仅仅一次",这就意味着如果JMS提供者出现故障,该消息并不会丢失,它会在服务器恢复之前再次传递
一条非持久性消息:最多会传送一次,这就意味着服务器出现故障,该消息将永远消失
JMSExpiration
过期时间默认永不过期
JMSPriority
优先级0-9十个级别,0-4是普通消息5-9是加急消息
JMS不要求MQ严格按照这十个优先级来发送消息,但必须保证加急消息要优先于普通消息默认4级
JMSMessageID(幂等性会用到)
唯一识别每个消息的标识由MQ产生
消息体
发送和接收的消息体类型必须一直对应
封装具体的消息数据
5种消息体格式
TextMessage
普通字符串消息,包含一个String
MapMessage
一个Map类型的消息,key为Srting类型,而值为Java的基本类型
BytesMessage
二进制组消息,包含一个byte[]
StreamMessage
Java数据流消息,用标准流操作来顺序的填充和读取
ObjectMessage
对象消息,包含一个可序列化的Java对象
消息属性
如果需要除消息头字段外的值,那么可以使用消息属性
识别/去重/重点标注等操作非常有用的方法
JMS的可靠性(事务)
PERSISTENT:持久性
参数设置(队列默认持久)
非持久:messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
非持久化:当服务器宕机,消息不存在
持久:messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
持久化:当服务器宕机,消息依然存在
持久性的Queue
持久的Topic
Transacction事务:
false
true
只要执行send,就进入到队列中。
关闭事务,那第2个签收参数的设置需要有效
先执行send再执行