Sun Java System Message Queue 3.7 UR1 技术概述

Message Queue:元素和功能

至此,已经介绍了面向消息的中间件的元素和使用 JMS 作为增加 MOM 应用程序可移植性的方法。接下来介绍 Message Queue 如何实现 JMS 规范,并介绍它用来提供可靠、安全且可伸缩的消息传送服务的功能和工具。

首先,与很多 JMS 提供者类似,Message Queue 可以用作独立产品或用作启用技术嵌入到 J2EE 应用服务器中提供异步消息传送。第 5 章,Message Queue 和 J2EE将更详细地介绍 Message Queue 在 J2EE 中所起的作用。与其他 JMS 提供者不同的是,Message Queue 已被指定为 JMS 引用实现。这一指定证明了这样一个事实:Message Queue 是正确而又完整的 JMS 实现。它还保证了 Message Queue 产品将与以后推出的任何 JMS 修订和扩展保持同步。

Message Queue 服务

作为一个 JMS 提供者, Message Queue 提供一个实现 JMS 接口并提供管理服务和控制的消息传送服务。至此,我们已在说明 JMS 提供者时重点介绍了代理在消息转发过程中扮演的角色。但实际上,除了代理外,JMS 提供者中还必须包括许多元素才能提供可靠、安全且可伸缩的消息传送。图 1–6 展示了构成 Message Queue 消息服务的元素。这些元素包括各种连接服务(支持不同的协议)、管理工具以及数据存储库,它们用于执行消息传送、监视以及用户信息存储。Message Queue 服务本身包含图中标记为灰色的所有元素。

图 1–6 Message Queue 服务

图中展示了 Message Queue 服务的组件。图采用文本进行说明。

如图所示,功能完善的 JMS 提供者比基本 JMS 模型复杂令人感到很疑惑。以下各节将介绍上面显示的 Message Queue 服务元素。这些元素可以分成三类:代理、客户端运行时环境支持和管理。

连接到代理

图 1–6 所示,应用程序客户端和管理客户端都可以连接到代理。JMS 规范未规定提供者实现任何特定的线路协议。应用程序客户端和管理客户端用于连接到代理的 Message Queue 服务,这些服务当前位于 TCP、TLS、HTTP 或 HTTPS 协议的顶层。(位于 HTTP 顶层的服务使消息可以穿过防火墙。)

默认情况下,当启动代理时,会启动并运行 jmsadmin 服务。此外,还可以将代理配置为运行上述任一或全部连接服务。每个服务都支持特定的验证和授权(访问控制)功能,每个服务都是多线程的并且支持多个连接。

当连接失败时, Message Queue 服务能够自动重新尝试将客户端连接到同一代理或另一代理(如果启用了此功能)。有关详细信息,请参见附录 B,Message Queue 功能 中自动重新连接功能的介绍。

创建从中获得其连接的连接工厂时,客户端可以配置连接运行时环境支持。可以通过选项来指定要连接到的代理、重新连接的处理方式、消息流控制等。有关如何配置连接的其他信息,请参见连接工厂和连接

代理

代理是消息服务的核心,它以可靠的方式路由和传送消息,对用户进行验证并收集用来监视性能的数据。

Message Queue 服务提供各种管理工具,管理员可以使用这些工具来配置代理支持。有关详细信息,请参见管理

客户端运行时环境支持

客户端运行时环境支持在构建 Message Queue 客户端时所链接到的库中提供。可以将客户端运行时环境视为已成为客户端一部分的 Message Queue 服务的代码。例如,当客户端代码进行 API 调用以发送消息时,将调用这些库中的代码,以便根据用来将消息转发到代理上的物理目的地的协议来相应地包装消息位。

Java 客户端和 C 客户端支持

只有当需要支持 Java 客户端时,才需要 JMS 提供者。但是,如图 1–6 所示,Message Queue 客户端可以使用 Java 或特定于提供者的 C API 来发送或接收消息。这些接口是在 Java 或 C 运行时环境库中实现的,这些库的实际作用是建立与代理的连接并根据所请求的连接服务来相应地包装位。

Message Queue 服务提供一个 C API,使传统 C 和 C++ 应用程序能够参与基于 JMS 的消息传送。这两个 API 所提供的功能有许多不同,Java 客户端与 C 客户端对此进行了说明。

一定要记住 JMS 规范是只适用于 Java 客户端的标准。而 C 支持则是特定于 Message Queue 提供者,因此在计划移植到其他提供者的客户端应用程序中不应该使用该支持。

对 Java 客户端的 SOAP 支持

Message Queue Java 客户端还能够发送和接收包装为 JMS 消息的 SOAP 消息。使用 SOAP(Simple Object Access Protocol,简单对象访问协议)可以实现在分布式环境中的两个对等方之间交换结构化数据。所交换的数据由 XML 方案指定。

Sun SOAP 处理当前仅限于使用点对点模型,并且不保证可靠性。通过将 SOAP 消息包装到 JMS 消息中,并使用代理来传送该消息,从而可以使用功能完善的 Message Queue 消息传送,这样会保证传送的可靠性且可以使用主题和点对点域。Message Queue 提供实用程序例程,使用这些例程,消息生成方可以将 SOAP 消息包装到 JMS 消息中,消息使用方可以从 JMS 消息中提取 SOAP 消息。

通过使用 SOAP 消息,可以更详细地了解 SOAP 消息处理。

管理

Message Queue 服务提供可用来执行以下操作的命令行工具:

还可以使用基于 GUI 的管理控制台执行以下命令行功能:

扩展 Message Queue 服务

由于客户端数量和连接数量的增长,可能会需要扩展消息服务来消除瓶颈或增强性能。Message Queue 消息服务根据您的需要提供许多扩展选项。可以很容易地将这些选项归为以下几类: