好的,阿杰,我们来系统梳理一下 JMS(Java 消息服务) 的入门知识,包括概念、核心接口、使用步骤以及示例代码。


1️⃣ JMS 概念

JMS(Java Message Service) 是 Java EE 提供的一种 消息中间件 API,用于实现 异步通信 和 松耦合系统

特点:

  • 异步通信:发送者和接收者不需要同时在线
  • 松耦合:发送者只需要知道消息目标,不关心谁接收
  • 可靠传输:支持事务、确认机制
  • 两种消息模型
    1. 点对点(Point-to-Point, P2P)
      • 使用 Queue 队列
      • 每条消息只被一个消费者接收
    2. 发布/订阅(Publish/Subscribe, Pub/Sub)
      • 使用 Topic 主题
      • 消息可以被多个订阅者接收

2️⃣ JMS 核心接口

接口/类作用
ConnectionFactory创建连接的工厂
Connection表示到消息服务提供者的连接
Session创建消息、生产者、消费者,支持事务
Destination消息目标(Queue 或 Topic)
MessageProducer发送消息
MessageConsumer接收消息
Message消息对象,有多种类型:TextMessageObjectMessageBytesMessage 等

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文本消息(最常用)
ObjectMessageJava 对象消息
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️⃣ 小结

  1. JMS 是 Java 异步消息服务 API,支持 P2P(Queue)和 Pub/Sub(Topic)模型
  2. 核心流程:连接工厂 → 连接 → 会话 → 消息目标 → 生产者/消费者 → 发送/接收 → 关闭
  3. 消息类型丰富,可根据业务需求选择
  4. JMS 常配合 ActiveMQ、HornetQ、RabbitMQ 等消息中间件使用