好的,阿杰,我们来系统梳理一下 JMS(Java 消息服务) 的入门知识,包括概念、核心接口、使用步骤以及示例代码。
1️⃣ JMS 概念
JMS(Java Message Service) 是 Java EE 提供的一种 消息中间件 API,用于实现 异步通信 和 松耦合系统。
特点:
- 异步通信:发送者和接收者不需要同时在线
- 松耦合:发送者只需要知道消息目标,不关心谁接收
- 可靠传输:支持事务、确认机制
- 两种消息模型:
- 点对点(Point-to-Point, P2P)
- 使用
Queue
队列 - 每条消息只被一个消费者接收
- 使用
- 发布/订阅(Publish/Subscribe, Pub/Sub)
- 使用
Topic
主题 - 消息可以被多个订阅者接收
- 使用
- 点对点(Point-to-Point, P2P)
2️⃣ JMS 核心接口
接口/类 | 作用 |
---|---|
ConnectionFactory | 创建连接的工厂 |
Connection | 表示到消息服务提供者的连接 |
Session | 创建消息、生产者、消费者,支持事务 |
Destination | 消息目标(Queue 或 Topic) |
MessageProducer | 发送消息 |
MessageConsumer | 接收消息 |
Message | 消息对象,有多种类型:TextMessage 、ObjectMessage 、BytesMessage 等 |
3️⃣ JMS 使用步骤(核心流程)
1. 创建连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
2. 创建连接并启动
Connection connection = connectionFactory.createConnection();
connection.start();
3. 创建会话(Session)
// 参数1:是否开启事务
// 参数2:消息确认模式
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
4. 创建消息目标(Queue/Topic)
Queue queue = session.createQueue("testQueue"); // P2P
Topic topic = session.createTopic("testTopic"); // Pub/Sub
5. 创建生产者/消费者
MessageProducer producer = session.createProducer(queue);
MessageConsumer consumer = session.createConsumer(queue);
6. 创建消息并发送
TextMessage message = session.createTextMessage("Hello JMS!");
producer.send(message);
7. 接收消息
Message msg = consumer.receive(1000); // 阻塞1秒
if (msg instanceof TextMessage) {
TextMessage textMessage = (TextMessage) msg;
System.out.println("Received: " + textMessage.getText());
}
8. 关闭资源
producer.close();
consumer.close();
session.close();
connection.close();
4️⃣ JMS 消息类型
类型 | 说明 |
---|---|
TextMessage | 文本消息(最常用) |
ObjectMessage | Java 对象消息 |
BytesMessage | 字节消息 |
MapMessage | 键值对消息 |
StreamMessage | 数据流消息 |
5️⃣ JMS 示例(完整点对点 P2P)
发送者(Producer):
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("testQueue");
MessageProducer producer = session.createProducer(queue);
TextMessage message = session.createTextMessage("Hello JMS!");
producer.send(message);
producer.close();
session.close();
connection.close();
接收者(Consumer):
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("testQueue");
MessageConsumer consumer = session.createConsumer(queue);
TextMessage message = (TextMessage) consumer.receive();
System.out.println("Received: " + message.getText());
consumer.close();
session.close();
connection.close();
6️⃣ 小结
- JMS 是 Java 异步消息服务 API,支持 P2P(Queue)和 Pub/Sub(Topic)模型
- 核心流程:连接工厂 → 连接 → 会话 → 消息目标 → 生产者/消费者 → 发送/接收 → 关闭
- 消息类型丰富,可根据业务需求选择
- JMS 常配合 ActiveMQ、HornetQ、RabbitMQ 等消息中间件使用
发表回复