什么是 JMS?
ActiveMQ JMS 是 Java Message Service 的缩写。
JMS 是 Java 平台上的一个标准 API,用于实现应用程序之间的消息传递和通信。
它是 Java EE 规范的一部分,旨在提供一个与厂商无关的 API,以便访问不同的消息中间件系统。
JMS 的组成结构和特点
很多内容之前已经提到,本文仅做一些补充,只介绍几个核心
|-------------------|-----------------------------------------------------------|
| JMS Broker | 消息服务器,作为server提供消息核心服务 |
| JMS Provider | 消息生产者,创建和发送消息的客户端应用 |
| JMS Consumer | 消息消费者,接收和处理消息的客户端应用 |
| JMS Message | 消息头、消息属性、消息体 |
消息头和消息属性
可选配置,详见 javax.jms.Message。
消息头和消息属性,并不是必填项,大都是生产者与消费者之间的一种约定;
类似于 http 中的 content-type,消费者读到这个属性,就知道该如何去解析消息了;
消息头的作用亦是如此,除了消息本身,有时候还要附加一些消息描述。
message.setObjectProperty(name, org);
用途举例:
路由和过滤:通过消息头中的信息,ActiveMQ 可以正确路由消息到目标消费者,同时可以根据需要进行消息过滤,确保只有符合条件的消息被处理。
优先级处理:根据消息头的优先级信息,ActiveMQ 可以优先处理高优先级的消息,确保关键业务能够及时响应。
增强消息的可追踪性:通过消息头中的发送者和时间戳等信息,可以更好地追踪消息的发送和接收情况,有助于问题排查和系统优化
一些对消息有影响的配置
// 设置持久化模式:队列重启的时候,是否需要恢复数据?
message.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 消息到期之前,如果消息还未发送,则直接清除,0 表示不清除
message.setJMSExpiration(1000);
// 消息优先级,从 0-9 十个级别,0-4是普通消息,5-9是加急消息。默认为 4
message.setJMSPriority(10);
// 唯一标识每个消息的标识。MQ 会给我们默认生成一个,我们也可以自己指定。
message.setJMSMessageID("test");
消息体
- 简单文本(TextMessage),即一个字符串对象
- 可序列化的对象 (ObjectMessage),即一个序列化的 Java对象
- 属性集合 (MapMessage),即一套名称-值对
- 字节流 (BytesMessage),即一个未解释字节的数据流
- 原始值流 (StreamMessage),即Java原始值的数据流