一、JMS是什么
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
JMS是一种与厂商无关的 API,用来访问收发系统消息,它类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。
二、JMS组成的特点
- JMS provider 实现JMS接口和规范的消息中间件,也就是MQ服务器(安装的MQ软件)
2.JMS producer 消息生产者,创建以及发送消息的客户端应用
3.JMS consumer 消息消费者,接收与处理消息的客户端
4.JMS message 消息的载体
三、JMS Messahe详解
消息头
JMSDestination : 消息发送的目的地,指Queue和Topic
JMSDeliveryMode: 消息的持久模式和非持久模式,一条持久性的消息应该被传送“仅仅一次”,这意味这如果JMS提供者出现故障,该消息不会丢失,他会在服务器恢复之后再次传递。
非持久消息,最多传送一次,服务器出现故障,消息永远丢失。
JMSExpiration: 过期时间:默认永不过期
MSPririty: 消息优先级(0-9 越大越优先,非绝对)0-4普通消息,5-9加急消息 默认优先级是4
JMSMessageID: 消息生成的唯一标识,由MQ产生,也可以自己定义(分布式项目可以使用分布式id生成器)
消息体
TextMessage: 常用 一个字符串对象
MapMessage: 常用 一套键值对
BytesMessage:一个字节的数据流
StreamMesage:Java原始值的数据流
ObjectMessage:一个序列化的Java对象,需要放行这个Java对象所在包的检查
发送和接收的类型必须是对应的
消息属性
消息属性是一种加强型的API
如果需要使用消息头外的值,可以使用消息属性
用于识别、去重、中带你标注等操作
它们是属性名属性值对应的形式制订的,如果需要除消息头字段以外的值,那么可以使用消息属性,在message.send()之前,对消息设置属性