由deepseek翻译。
Jakarta Messaging 核心概念
注意:我们正在更新 Jakarta EE 教程。本节内容尚未完成最新修订。
本章简介
本章介绍 Jakarta Messaging(一种 Java API),它允许应用程序通过可靠、异步、松耦合的通信方式创建、发送、接收和读取消息。
Jakarta Messaging 概述
本节定义消息传递的概念,描述 Jakarta Messaging 的用途,并解释其在 Jakarta EE 平台中的工作原理。
什么是消息传递?
消息传递是软件组件或应用之间的通信方法。消息系统是点对点设施:
-
消息客户端可向任何其他客户端发送或接收消息。
-
每个客户端连接到消息代理(Messaging Agent),后者提供创建、发送、接收和读取消息的功能。
松耦合通信:
-
发送方将消息发送到目标(Destination),接收方从目标获取消息。
-
发送方和接收方无需同时在线,也无需知晓对方的存在,仅需共享消息格式和目标。
-
与紧耦合技术(如 RMI)不同,消息传递不依赖远程方法调用。
与电子邮件的区别:
-
消息传递专用于软件应用或组件间通信,而非人与人之间的交互。
什么是 Jakarta Messaging?
Jakarta Messaging 是 Java API,支持应用程序通过标准化接口实现消息通信。其核心特性包括:
-
异步通信:接收方无需实时处理消息,发送方可继续执行其他任务。
-
可靠性:确保消息一次且仅一次投递(支持不同级别的可靠性)。
-
跨提供者兼容性:最大限度保障应用的可移植性。
当前版本:Jakarta Messaging 3.0。
何时使用 Jakarta Messaging?
在以下场景中,企业应用更适合选择消息传递而非紧耦合 API(如 RPC):
-
组件独立性:组件无需依赖其他组件的接口,便于替换。
-
容错性:应用可在部分组件离线时继续运行。
-
无需即时响应:发送方发送信息后无需等待回复。
示例:汽车制造企业的应用场景
-
库存组件通知工厂组件补货。
-
工厂组件通知零件组件装配需求。
-
零件组件更新库存并订购新零件。
-
工厂与零件组件更新财务预算。
-
销售团队接收最新产品目录。
通过消息传递,各组件高效协作,无需占用网络资源。
Jakarta Messaging 与 Jakarta EE 平台的集成
Jakarta Messaging 是 Jakarta EE 平台的核心部分,支持以下特性:
-
组件支持:
-
应用客户端、Jakarta Enterprise Beans 和 Web 组件可同步发送/接收消息。
-
应用客户端可设置异步消息监听器。
-
-
消息驱动 Bean(MDB):
-
在 EJB 容器中异步消费消息,支持并发处理(通过 Bean 池化)。
-
-
事务支持:
-
消息操作与数据库访问可在同一事务(Jakarta Transactions)中完成。
-
-
连接器集成:
-
通过 Jakarta Connectors 将消息提供者与应用服务器集成,支持多提供者插拔。
-
基础 Jakarta Messaging 概念
本节介绍 Jakarta Messaging 的核心概念,适合编写简单客户端应用的开发者。后续章节将深入高级主题(如消息驱动 Bean)。
Jakarta Messaging 架构
一个 Jakarta Messaging 应用包含以下部分:
-
Jakarta Messaging 提供者:
-
实现消息接口的消息系统(如 ActiveMQ、HornetQ)。
-
Jakarta EE 实现默认包含提供者。
-
-
Jakarta Messaging 客户端:
-
用 Java 编写的生产/消费消息的程序或组件。
-
任何 Jakarta EE 组件均可作为客户端,Java SE 应用也可通过配置支持。
-
-
消息:
-
客户端间传递信息的对象。
-
-
管理对象:
-
预配置的 JMS 对象(通过 JNDI 访问):
-
目标(Destination):队列(Queue)或主题(Topic)。
-
连接工厂(ConnectionFactory):创建连接的工厂对象。
-
-
消息传递模式
Jakarta Messaging 支持两种传统模式,但允许通过统一 API 混合使用(代码可跨模式复用)。
点对点(PTP)模式
-
基于队列:消息发送到特定队列,由单个消费者接收。
-
特性:
-
每条消息仅一个消费者。
-
队列保留消息直至被消费或过期。
-
适用场景:需确保每条消息被唯一消费者处理。
发布-订阅(Pub/Sub)模式
-
基于主题:消息广播到所有订阅者。
-
特性:
-
每条消息可被多个消费者处理。
-
支持持久订阅(Durable Subscription):离线时保留消息,重连后投递。
-
支持共享订阅(Shared Subscription):多个消费者共同处理消息。
-
适用场景:消息需广播给多个消费者(或无消费者)。
消息消费方式
-
同步消费:
-
调用
receive()
方法阻塞等待消息:
java
复制
Message message = consumer.receive(); // 无限等待 Message message = consumer.receive(1000); // 超时1秒
-
-
异步消费:
-
注册消息监听器(
MessageListener
),消息到达时触发回调:
java
复制
consumer.setMessageListener(message -> { // 处理消息 });
-
消息驱动 Bean:EJB 容器中的专用监听器,支持并发处理。
-
术语对照表
英文术语 | 中文术语 |
---|---|
Connection Factory | 连接工厂 |
Destination | 目标 |
Queue | 队列 |
Topic | 主题 |
Durable Subscription | 持久订阅 |
Message-Driven Bean (MDB) | 消息驱动 Bean |
Asynchronous | 异步 |
Synchronous | 同步 |
此翻译完整覆盖 Jakarta Messaging 的核心概念,适用于开发者快速掌握技术要点。