Jakarta Messaging 导学系列:Jakarta Messaging 核心概念

由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):

  1. 组件独立性:组件无需依赖其他组件的接口,便于替换。

  2. 容错性:应用可在部分组件离线时继续运行。

  3. 无需即时响应:发送方发送信息后无需等待回复。

示例:汽车制造企业的应用场景

  • 库存组件通知工厂组件补货。

  • 工厂组件通知零件组件装配需求。

  • 零件组件更新库存并订购新零件。

  • 工厂与零件组件更新财务预算。

  • 销售团队接收最新产品目录。

通过消息传递,各组件高效协作,无需占用网络资源。

图24. 企业应用中的消息传递


Jakarta Messaging 与 Jakarta EE 平台的集成

Jakarta Messaging 是 Jakarta EE 平台的核心部分,支持以下特性:

  1. 组件支持

    • 应用客户端、Jakarta Enterprise Beans 和 Web 组件可同步发送/接收消息。

    • 应用客户端可设置异步消息监听器。

  2. 消息驱动 Bean(MDB)

    • 在 EJB 容器中异步消费消息,支持并发处理(通过 Bean 池化)。

  3. 事务支持

    • 消息操作与数据库访问可在同一事务(Jakarta Transactions)中完成。

  4. 连接器集成

    • 通过 Jakarta Connectors 将消息提供者与应用服务器集成,支持多提供者插拔。


基础 Jakarta Messaging 概念

本节介绍 Jakarta Messaging 的核心概念,适合编写简单客户端应用的开发者。后续章节将深入高级主题(如消息驱动 Bean)。

Jakarta Messaging 架构

一个 Jakarta Messaging 应用包含以下部分:

  1. Jakarta Messaging 提供者

    • 实现消息接口的消息系统(如 ActiveMQ、HornetQ)。

    • Jakarta EE 实现默认包含提供者。

  2. Jakarta Messaging 客户端

    • 用 Java 编写的生产/消费消息的程序或组件。

    • 任何 Jakarta EE 组件均可作为客户端,Java SE 应用也可通过配置支持。

  3. 消息

    • 客户端间传递信息的对象。

  4. 管理对象

    • 预配置的 JMS 对象(通过 JNDI 访问):

      • 目标(Destination):队列(Queue)或主题(Topic)。

      • 连接工厂(ConnectionFactory):创建连接的工厂对象。

图25. Jakarta Messaging 架构


消息传递模式

Jakarta Messaging 支持两种传统模式,但允许通过统一 API 混合使用(代码可跨模式复用)。

点对点(PTP)模式
  • 基于队列:消息发送到特定队列,由单个消费者接收。

  • 特性

    • 每条消息仅一个消费者。

    • 队列保留消息直至被消费或过期。

适用场景:需确保每条消息被唯一消费者处理。

图26. 点对点消息传递

发布-订阅(Pub/Sub)模式
  • 基于主题:消息广播到所有订阅者。

  • 特性

    • 每条消息可被多个消费者处理。

    • 支持持久订阅(Durable Subscription):离线时保留消息,重连后投递。

    • 支持共享订阅(Shared Subscription):多个消费者共同处理消息。

适用场景:消息需广播给多个消费者(或无消费者)。

图27. 发布-订阅消息传递


消息消费方式
  1. 同步消费

    • 调用 receive() 方法阻塞等待消息:

    java

    复制

    Message message = consumer.receive();       // 无限等待  
    Message message = consumer.receive(1000);   // 超时1秒  
  2. 异步消费

    • 注册消息监听器(MessageListener),消息到达时触发回调:

    java

    复制

    consumer.setMessageListener(message -> {  
        // 处理消息  
    });  
    • 消息驱动 Bean:EJB 容器中的专用监听器,支持并发处理。


术语对照表

英文术语中文术语
Connection Factory连接工厂
Destination目标
Queue队列
Topic主题
Durable Subscription持久订阅
Message-Driven Bean (MDB)消息驱动 Bean
Asynchronous异步
Synchronous同步

此翻译完整覆盖 Jakarta Messaging 的核心概念,适用于开发者快速掌握技术要点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值