![]() | |
Sun Java System Message Queue 3 2005Q1 技术概述 |
第 2 章
Message Queue 简介Message Queue 是一种符合 JMS 1.1 规范的可靠、异步的消息传送服务。此外,为满足大规模企业部署的需要,Message Queue 还提供了 JMS 规范要求之外的许多功能。
本章说明 Message Queue 服务体系结构,并介绍其企业功能。本章涵盖以下主题:
消息服务体系结构Message Queue 服务由下列元素构成:
图 2-1 显示了这些元素如何协同工作。
图 2-1 Message Queue 服务体系结构
如图中所示,Message Queue 客户机使用 Java 或 C API 来发送或接收消息。这些 API 是在 Java 或 C 客户机运行时库中实现的,该库的实际作用是创建到代理的连接并为请求的连接服务适当地封装位。如果应用程序使用受管理对象,则客户机运行时会在对象存储库中找到这些对象,并使用它们来配置连接和定位物理目标。代理会路由和传送消息。管理员可以使用 Message Queue 管理工具来管理代理,并向对象存储库中添加受管理对象。
以下各节简要说明这些元素。
消息服务器
消息服务器由一个或多个代理组成,它执行消息的路由和传送。它是 Message Queue 服务的核心。
消息服务器由单个代理或一组协同工作的代理(代理群集)组成,用于执行消息路由和传送服务。代理是执行下列任务的一个进程:
有关消息服务器、其内部组件以及这些组件所执行的功能的详细说明,请参见第 4 章“消息服务器”。
Message Queue Enterprise Edition 支持使用代理群集,该群集由多个相互连接的代理实例组成,使消息服务器能够根据消息通信流量进行调整。有关体系结构和群集配置问题的说明,请参见第 5 章“代理群集”。
客户机运行时
Message Queue 客户机运行时为客户机应用程序提供了它与 Message Queue 服务的接口。客户机运行时支持 Message Queue 客户机生成消息(向目标发送消息)和使用消息(从目标中检索消息)所需的所有操作。
Message Queue 客户机运行时有两种语言实现,如图 2-1 中所示:
图 2-2 说明了客户机运行时在 Message Queue 客户机与消息服务器间所起到的核心作用。消息生成和使用是客户机与客户机运行时之间的交互;而消息传送是客户机运行时与消息服务器之间的交互。
图 2-2 客户机运行时和消息传送操作
客户机运行时执行下列功能:
以下小节简要说明客户机运行时功能。可以通过配置连接工厂对象的属性来自定义客户机运行时某些方面的功能。
连接处理
要配置连接处理功能,必须指定客户机要连接的代理的主机名和端口以及所需的连接服务类型。如果连接到的代理是某个群集的一部分,则必须指定要连接到的地址列表。如果某个代理没有联机,客户机运行时可以让您连接到群集中的其他代理。
在企业版中,如果连接失败,则客户机运行时可以自动重新连接到代理。如果客户机连接的代理是某个群集的一部分,则重新连接的代理可以是原来连接的同一代理,也可以是不同的代理。
如果代理实例不使用共享的、高可用性的持久性存储(可以通过将 Message Queue 与 Sun Cluster 相集成来实现),则当代理发生故障(或连接中断)时,它所保留的持久性消息和其他状态信息可能会因重新连接到其他代理实例而丢失。也就是说,重新连接能够提供连接故障转移,但不能保证数据可用性。
客户机标识
如果应用程序认为有用,可以在任何连接上设置客户机 ID;要标识长期订户,就必须设置客户机 ID。
为跟踪长期订阅,代理使用唯一的客户机标识。客户机 ID 用于标识在将消息传送到主题目标时处于非活动状态的长期订户。代理会保留传送给这些订户的消息,在订户恢复活动状态时再将消息提供给它们。
因此,每当在已部署的应用程序中使用长期订阅时,都必须设置客户机标识符。Message Queue 功能,允许您在指定客户机 ID 时使用一种特殊的变量名语法。这样,就可以为从连接工厂对象获取的每个连接获取不同的客户机 ID,无论该对象是由管理员创建的,还是通过编程方式创建的。有关详细信息,请参见 Message Queue 管理指南。
向消费者分发消息
客户机运行时接收代理通过连接传送的消息,并分发到适当的 Message Queue 会话,在这些会话中,将消息排队以等待供各自的消息消费者使用,如图 2-3 中所示。
图 2-3 将消息传送到 Message Queue 客户机运行时
每次从每个会话队列中取出一条消息,然后同步使用(通过调用 receive() 方法的客户机线程)或异步使用(通过调用消息侦听器对象的 onMessage() 方法的会话线程)消息。(会话是单线程的。)
传送到客户机运行时的消息流是在每个消费者级别测量的。可以通过适当调整连接工厂属性来平衡消息流,从而使传送到一个会话的消息不会对使用同一连接传送到其他会话的消息产生不利影响。
确保可靠的消息传送
客户机运行时在确保可靠传送消息方面具有非常重要的作用。它支持 JMS 规范的客户机确认和事务模式,并控制各种用于保证可靠传送的代理确认功能。
JMS 规范描述了多种客户机确认模式,这些模式可以提供不同级别的可靠性。这些确认模式及由 Message Queue 实现的其他模式是在消息使用上下文中描述的(请参见客户机确认)。
在持久性消息和可靠传送的情况下,代理通常会在完成用来确保只对消息使用且只使用一次的操作后对客户机运行时进行确认。可以使用连接工厂属性来抑制这些代理确认,从而节省网络带宽和处理过程。当然,这种抑制代理确认的方式也会使传送的可靠性得不到保证。
消息流控制
客户机运行时是连接间消息流的监控者。除通过连接传送的一般 JMS 有效负荷消息外,Message Queue 还会发送各种控制消息,这些消息用于保证传送的可靠性、管理连接间的消息流以及执行其他控制功能。
由于有效负荷消息和控制消息争用同一连接,因此可能会发生冲突,从而导致拥堵。客户机运行时会强制实施各种可配置的流量限制和测量模式,来最大限度减少有效负荷消息与控制消息间的冲突,进而最大限度地提高消息吞吐量。
覆盖消息标题值
客户机运行时可以覆盖 JMS 消息标题字段,此字段指定了消息的持久性、生命周期以及优先级。
Message Queue 允许在连接级别覆盖消息标题:覆盖应用于在给定连接上下文中生成的所有消息。
由于客户机运行时能够覆盖消息标题值,因此,Message Queue 管理员对消息服务器资源的控制能力得到提升。不过,覆盖这些字段的风险是会干扰特定于应用程序的要求(例如,消息持久性)。因此,应事先咨询适当的应用程序用户或设计人员,再使用此功能。
其他功能
客户机运行时还执行其他几种不同类型的功能:
受管理对象
受管理对象封装特定于提供者的有关连接和目标的实现和配置信息。可以通过编程方式来创建受管理对象,也可以使用管理员工具来创建和配置它们,并将其存储在对象存储库中,供客户机应用程序通过标准 JNDI 查找代码进行访问。
Message Queue 提供了下表中所示的受管理对象类型。
表 2-1 Message Queue 受管理对象类型
类型
说明
目标
表示代理中的一种物理目标。包含代理中物理目标的特定于提供者的名称。消息消费者和/或消息生产者使用目标受管理对象来访问相应的物理目标。
连接工厂
在客户机应用程序与 Message Queue 消息服务器之间建立物理连接。还对 Message Queue 客户机运行时(控制物理连接的功能)进行配置。设置连接工厂受管理对象的属性值时,请指定应用于它所建立的所有连接的属性。
XA 连接工厂
用于建立支持分布式事务的物理连接(请参见分布式事务)。XA 连接工厂对象与普通连接工厂对象共享同一组属性,但它可以启用支持分布式事务所需的其他机制。
SOAP 端点
标识 SOAP 消息的最终目标:这是可以接收 SOAP 消息的 Servlet 的 URL。可以配置 SOAP 端点受管理对象来指定多个 URL。还可以指定与对象关联的查找名以及对象存储库属性。
通过 JNDI 使用受管理对象
尽管 JMS 规范并不要求 JMS 客户机在 JNDI 名称空间中查找受管理对象,但这样做的优点是显而易见的:可以实现单一的控制源,不必重新编码即可对连接(客户机运行时功能)进行配置和重新配置,并可以将客户机移植到其他 JMS 提供者上。
通过使用受管理对象,可以更容易地控制和管理 Message Queue 服务:
换言之,Message Queue 管理员可以使用受管理对象来控制消息服务配置细节,同时使客户机应用程序成为与提供者无关的应用程序。
使用受管理对象意味着,客户机程序员不需要了解特定于提供者的语法和对象命名惯例或提供者特有的配置属性。实际上,通过将受管理对象指定为只读,管理员可以确保客户机应用程序无法更改最初创建受管理对象时为其设置的属性值。
虽然客户机应用程序可以独立地实例化连接工厂和目标受管理对象,但这样会削弱受管理对象的基本用途。Message Queue 管理员需要控制应用程序所需的代理资源以及调节消息传送性能。此外,通过直接实例化受管理对象,将使客户机应用程序成为与提供者有关的应用程序。
尽管有这些参数,应用程序通常仍会在没有管理控制问题的开发环境中实例化受管理对象。
对象存储库
Message Queue 受管理对象位于对象存储库中(请参见图 2-1),客户机应用程序可以通过 JNDI 查找访问它们。Message Queue 支持以下两种类型的对象存储库:标准 LDAP 目录服务器和文件系统对象存储库。
LDAP 服务器对象存储库 对于生产型消息传送系统,建议使用 LDAP 服务器对象存储库。很多供应商都提供 LDAP 实现,而且 LDAP 实现可以在分布式系统中使用。LDAP 服务器还提供对生产环境特别有用的安全功能。
文件系统对象存储库 Message Queue 支持文件系统对象存储库(不建议将其用于生产系统),但它的优势是在开发环境中非常容易使用。与其设置一台 LDAP 服务器,还不如在本地文件系统中创建一个目录。不过,文件系统对象存储库不能用作在多个计算机节点上部署的客户机的集中式对象存储库,除非这些客户机可以访问该对象存储库所在的目录。
管理工具
Message Queue 管理工具包含一组命令行实用程序和一个图形用户界面 (GUI) 管理控制台。
命令行实用程序 Message Queue 提供了一套命令行实用程序来执行所有 Message Queue 管理任务,如启动和管理代理、创建和管理物理目标、管理受管理对象以及执行其他更专门化的管理任务。所有的命令行实用程序均共用相同的格式、语法约定和选项。有关使用命令行实用程序的更多详细信息,请参见 Message Queue 管理指南。
管理控制台 控制台提供了 Message Queue 命令行实用程序的部分功能。可以使用管理控制台来管理代理、创建和管理物理目标以及管理受管理对象。不过,无法执行部分命令行实用程序能够执行的更专门化的任务。例如,无法使用管理控制台来启动代理、创建代理群集或管理用户系统信息库。必须使用 Message Queue 命令行实用程序来执行这些任务。
Message Queue 管理指南提供了一个简明扼要的实用教程,帮助您熟悉管理控制台,并说明了如何使用控制台完成基本任务。
管理控制台和某些命令行实用程序允许对代理和物理目标进行远程管理。
产品功能Message Queue 服务和上一节中介绍的体系结构完全实现了 JMS 1.1 规范对于消息传送的可靠性、异步性及灵活性的要求。有关 JMS 兼容性相关问题的文档,请参见附录 A “可选 JMS 功能 Message Queue 实现” 。
不过,Message Queue 拥有的功能远远超出了 JMS 规范的要求。这些功能使 Message Queue 可以集成包含大量分布式组件的系统,而这些组件在全天候的关键任务操作中交换数以万计的消息。
Message Queue 的企业功能(下文中阐述)分为以下几个类别:
集成支持功能
通过包含对多种传输协议的支持、Message Queue 服务的 C 客户机接口、对 SOAP (XML) 消息的支持以及可插入的 J2EE 资源适配器,Message Queue 使您可以集成企业中各种完全不同的应用程序和组件。
多传输支持
Message Queue 支持客户机使用多种不同的传输协议(包括 TCP 和 HTTP)并通过安全连接与 Message Queue 消息服务器进行交互的功能。
HTTP 连接 HTTP 传输允许通过防火墙传送消息。Message Queue 使用在 Web 服务器环境中运行的 HTTP 隧道 Servlet 来实现 HTTP 支持。客户机生成的消息通过 HTTP 经过防火墙传送到隧道 Servlet。隧道 Servlet 从 HTTP 请求提取消息,然后将消息通过 TCP/IP 传送到代理。类似地,Message Queue 还支持使用 HTTPS 隧道 Servlet 的安全 HTTP 连接。有关 HTTP 连接体系结构的详细信息,请参见 HTTP/HTTPS 支持。有关建立和配置 HTTP/HTTPS 连接的信息,请参见 Message Queue 管理指南。
安全连接 Message Queue 提供 TCP/IP 和 HTTP 传输上基于安全套接字层 (SSL) 标准的安全消息传输。这些基于 SSL 的连接服务允许对在客户机和代理之间发送的消息进行加密。
SSL 支持基于自签名服务器证书。Message Queue 提供了一个实用程序,它可以生成专用/公共密钥对,并将公共密钥嵌入到自签名证书中。此证书将被传递到任何请求连接到代理的客户机,客户机使用该证书来建立加密连接。有关创建自签名证书来启用基于 SSL 的连接服务的信息,请参见 Message Queue 管理指南。
C 客户机接口
除了支持 Java 语言消息传送客户机外,Message Queue 还提供了 Message Queue 服务的 C 语言接口。C API 使传统 C 应用程序及 C++ 应用程序可以参与基于 JMS 的消息传送。不过,使用 Message Queue C API 的客户机无法移植到其他 JMS 提供者上。
支持 Message Queue C API 的 C 客户机运行时支持大多数标准 JMS 功能,但不支持以下 JMS 功能:使用受管理对象;映射、流或对象消息主体类型;分布式事务以及队列浏览器。C 客户机运行时也不支持大多数 Message Queue 企业功能。
有关 C API 功能及其如何使用 C 数据类型和函数实现 JMS 编程模型的详细信息,请参见 Message Queue Developer's Guide for C Clients。
SOAP (XML) 消息传送支持
Message Queue 支持创建和传送符合简单对象访问协议 (SOAP) 规范的消息。SOAP 允许在分散的分布式环境中的点之间交换结构化 XML 数据或 SOAP 消息。SOAP 消息是一种也可以包含附件(不必为 XML 格式)的 XML 文档。
由于 SOAP 消息以 XML 格式编码,因此与平台无关。可以使用它们来访问传统系统中的数据以及在企业间共享数据。XML 提供的数据集成还使这种技术成为基于 Web 计算(如 Web 服务)的自然选择。防火墙可以识别 SOAP 数据包,并可以根据 SOAP 消息标题中公开的信息对消息进行过滤。
Message Queue 实现了 SOAP with Attachments API for Java (SAAJ) 规范。SAAJ 是一种应用程序编程接口,可以通过实现该接口来支持用于 SOAP 消息传送的编程模型及提供可用于构建、发送、接收和检查 SOAP 消息的 Java 对象。SAAJ 定义了两个软件包:
Message Queue 提供了用于将 SOAP 消息与 JMS 消息进行双向转换的实用程序。使用它们可依次实现:Servlet 接收SOAP 消息,然后将其转换为JMS 消息;Message Queue 服务将 JMS 消息传送给 JMS 消费者,并将其转换回SOAP消息,然后再传送到SOAP 端点。换言之,Message Queue 支持在 SOAP 端点间可靠、异步地交换 SOAP 消息的能力。更简单地讲,就是将 SOAP 消息发布给 Message Queue 订户。
有关其他信息,请参见 Message Queue Developer's Guide for Java Clients。
J2EE 资源适配器
Java 2 Platform Enterprise Edition(J2EE 平台)是一种面向 Java 编程环境中分布式组件模型的规范。J2EE 平台的一项要求是,分布式组件之间必须能够通过可靠的异步消息交换进行交互。简言之,J2EE 平台需要 JMS 支持。
这一支持是通过在 J2EE 编程模型中使用消息驱动Bean (MDB) 提供的,MDB 是一种可以使用JMS 消息的专用类型的 Enterprise Java Bean (EJB) 组件。符合 J2EE 规范的应用服务器必须提供支持 JMS 消息传送的 MDB 容器。这可以通过在应用服务器中插入 JMS 资源适配器来实现。Message Queue 提供了这样的资源适配器。
通过将 Message Queue 资源适配器插入应用服务器,即可在应用服务器环境中部署和运行的 J2EE 组件(包括 MDB)之间以及这些组件与外部 JMS 组件之间交换 JMS 消息。这为分布式组件提供了强大的集成功能。
有关 Message Queue 资源适配器的信息,请参见第 6 章“Message Queue 和 J2EE”。
安全性功能
对于大多数企业应用而言,对存储和传送的消息数据进行保护至关重要。Message Queue 提供了多级安全性,其中包括用户验证、受控的资源访问以及消息加密。
验证 Message Queue 支持基于密码的用户验证。系统将根据存储在平面文件 (flat file) 或 LDAP 用户系统信息库中的密码决定是否授予用户连接到消息服务器的权限。将记录所有连接尝试(用户和主机)的相关信息,并可以对其进行跟踪。
授权 访问控制表 (ACL) 对代理连接和物理目标访问提供了可配置的精细控制。同时支持用户和组访问。授权是针对代理逐一执行的;每个代理可以具有不同的访问控制文件。
加密 SSL 支持允许使用全强度 SSL 实现对消息服务器与其客户机间的所有消息流量(无论是采用 TCP/IP 还是 HTTP 连接)进行加密。
有关填充用户系统信息库、管理访问控制表和设置 SSL 支持的信息,请参见 Message Queue 管理指南。
可伸缩性功能
Message Queue 允许您随用户、客户机连接和消息负荷的增长扩展应用程序。
可伸缩的连接功能
Message Queue 代理可以处理成千上万个并发连接。默认情况下,每个连接由专用的代理线程进行处理。因为这样会使线程即使在连接处于空闲状态时仍被占用,所以可以对连接服务进行配置,使多个连接可以共享同一线程。这种共享线程池模型可以显著增加代理可支持的连接的数量。有关详细信息,请参见线程池管理器。
代理群集
随着连接数和通过代理传送的消息数的增加,可以通过为 Message Queue 服务器添加其他代理实例来管理附加的负荷。代理群集在多个代理实例间平衡客户机连接和消息传送负荷,从而使消息服务器具有较高的可伸缩性。这些代理实例可以位于同一主机上,也可以分布在网络中。随着业务需求的增长,群集将是一种提高消息吞吐量和扩展消息传送带宽的理想方法。第 5 章“代理群集”介绍了代理群集,Message Queue 管理指南中对代理群集进行了更全面的阐述。
多个消费者的队列传送
按照 JMS 规范,只能将队列目标中的消息传送到一个消费者。Message Queue 允许多个消费者向队列注册。然后,代理可将消息分发至其他注册消费者,在它们之间平衡负荷,从而允许系统实现扩展。
多个消费者的队列传送是使用一种可配置的负荷平衡方法实现的。使用这种方法,可以指定最大活动消费者数量及最大备份消费者数量。备份消费者会在活动消费者发生故障时接替它的工作。此外,负荷平衡机制还将消费者的当前容量和消息处理速率考虑在内。
有关负荷平衡的队列传送的详细信息,请参见多个消费者的队列传送。
可用性功能
Message Queue 提供了很多用于最大限度缩短服务停机时间的功能。这些功能包括故障预防机制以及通过与 Sun Cluster 集成来提供高可用性的功能。
消息服务稳定性
确保消息服务可用性的一种最有效的方法是,提供一种既能实现高性能又能最大限度减少故障的服务。Message Queue 提供了转移内存过载或性能拥堵的机制。这些机制将在消息服务器和客户机运行时上运行。
消息服务器资源管理 由于消息服务器的内存和 CPU 资源有限,因此可能会因过载情况严重而停止响应或出现不稳定的情况。如果消息生成速率远远超过消息使用速率,则通常会发生这种情况。要避免出现以上情况,可以在物理目标级别和系统范围级别对代理进行配置以防止内存超限。有关详细信息,请参见内存资源管理。
客户机运行时消息流控制 此外,Message Queue 还提供了用于控制向客户机运行时传送消息的机制。可以使用流控制机制来优化向客户机运行时传送消息,同时防止客户机出现内存不足的现象。有关详细信息,请参见消息流控制。
自动重新连接到消息服务器
Message Queue 提供了自动重新连接功能:如果消息服务器与客户机间的连接发生故障,Message Queue 会保持客户机的状态,同时尝试重新建立连接。在大多数情况下,重新建立连接后,Message Queue 将以透明方式恢复消息的生成和使用。有关详细信息,请参见 Message Queue 管理指南。
通过 Sun Cluster 实现高可用性
尽管 Message Queue 的代理群集功能使消息服务器具有较高的可伸缩性,但目前尚不支持从群集内的一个代理实例到另一个代理实例的故障转移。不过,可以将 Message Queue 与 Sun Cluster 软件集成,以提供高可用性的消息服务器。通过使用为 Message Queue 开发的 Sun Cluster 代理,Sun Cluster 可以确保代理发生故障时状态数据不会丢失,从而使得消息服务器能够以透明方式得到立即恢复,而不会停机。
易管理性功能
Message Queue 提供了多种可用于监视和管理消息服务以及调节消息服务性能的功能。
强大的管理工具
Message Queue 同时提供了命令行工具和 GUI 工具来管理 Message Queue 消息服务器及管理目标、事务、长期订阅和安全性(请参见管理工具)。
Message Queue 还支持对消息服务器进行远程监视和管理,同时提供用于管理 JMS 受管理对象、用户系统信息库、符合 JDBC 规范的插入式数据存储库以及自签名服务器证书的工具。有关使用这些管理工具的信息,请参见 Message Queue 管理指南。
基于消息的监视 API
Message Queue 提供了基于 JMS 的简单监视 API,可以使用它来创建自定义的监视应用程序。这些监视应用程序是从特殊主题目标检索度量消息的消费者。度量消息包含 Message Queue 代理提供的监视数据(请参见度量消息生产者(企业版))。
有关每种类型的度量消息中报告的度量数量的详细信息,请参见 Message Queue Developer's Guide for Java Clients,其中介绍了如何开发使用度量消息的 Message Queue 客户机。有关如何配置度量消息生成的信息,请参见 Message Queue 管理指南。
可调节的性能
为获得最佳性能,Message Queue 提供了许多用以调节消息服务器和客户机运行时的方法。可以对主要资源进行监视及对内存使用情况、线程资源、消息流、连接服务、可靠性参数和其他影响消息吞吐量与系统性能的因素进行调整。有关如何调节消息服务性能的详细信息,请参见 Message Queue 管理指南。
灵活的服务器配置功能
Message Queue 允许您选择持久性对象、用户信息及受管理对象的存储方式。
可配置的持久性
为保证消息传送,Message Queue 会存储消息和其他持久性对象,直到消息被使用为止。除提供基于文件的高性能持久性存储外,Message Queue 还支持可配置的持久性。利用这一功能,可以将持久性消息存储在符合 JDBC 规范的嵌入式或外部数据库(如 Oracle 8i)中。有关详细信息,请参见持久性管理器。
LDAP 服务器支持
Message Queue 为基于文件的存储同时提供了验证和授权所需的受管理对象和用户信息。不过,Message Queue 还支持使用 LDAP 服务器作为受管理对象存储库和用户系统信息库。LDAP 服务器提供了更安全、标准的方法来存储和检索此类信息,建议在生产系统中使用。有关使用 LDAP 服务器作为受管理对象存储库和用户系统信息库的信息,请参见 Message Queue 管理指南。
产品版本可在两个版本中找到 Message Queue:企业版和平台版。两个版本都完全实现了 JMS 规范,只是它们所对应的功能集和许可功能不同。下表对这些功能集进行了比较。有关这些功能的说明,请参见产品功能。
下面介绍平台版与企业版的许可证功能。
企业版
通过使用 Message Queue 企业版,您可以在企业生产环境中部署和运行消息传送应用程序。您还可以使用它来开发和调试消息传送应用程序和组件,并对其进行负荷测试。基于所使用的 CPU 数量,企业版的许可证有效期是无限的。其许可证对多代理消息服务中的代理数量没有限制。
平台版
Message Queue 平台版对消息服务器所支持的客户机连接的数量没有限制。它提供基本许可证或 90 天试用许可证:
可以从 Sun 的 Web 站点免费下载平台版,它还附带有 Sun Java System Application Server 平台。Message Queue Installation Guide 中提供了有关从平台版 Message Queue 升级到企业版的说明。
Sun 产品环境下的 Message Queue除作为应用程序直接使用的中间件外,其他中间件以及 Sun 提供的其他服务器和应用程序也可以使用 Message Queue。为方便对它的使用,在 Solaris 和 Java Enterprise System 以及 Sun Java System Application Server 中均提供了 Message Queue。
在 Application Server 中,Message Queue 满足了 JMS 要求(J2EE 平台必须提供 JMS 提供者)。由 Application Server 托管的应用程序可以直接使用它。有关详细信息,请参见第 6 章“Message Queue 和 J2EE”。