Sun Java 徽标     上一页      目录      索引      下一页     

Sun 徽标
Sun Java System Message Queue 3 2005Q4 技术概述 

第 3 章
Message Queue 服务

Message Queue 客户端性能取决于客户端设计以及 Message Queue 服务的配置和管理方式。本章更详细地讲述第 1 章中介绍的 Message Queue 服务。同时本章还列出该服务的组件,介绍配置这些组件所用的工具,并概述在不同环境中管理消息服务所需的任务。本章包含以下各节:


组件服务

图 3-1 显示 Message Queue 服务。第 2 章介绍编程模型以及客户端如何使用 Java 和 C API 与客户端运行时进行交互。客户端运行时是客户端应用程序可以访问的消息服务的一部分。本章重点介绍管理员可以访问的消息服务的组件和服务。

图 3-1 Message Queue 服务

该图显示 Message Queue 服务的组件: 对象存储、客户端、客户端运行时、代理、管理员以及相互之间的连接。该图用文本进行说明。

可通过设置代理属性来控制 Message Queue 服务。这些属性可分为多个类别,具体取决于受特定属性影响的服务或代理组件。代理服务包括:

以下各节将介绍上述每个服务,并概述根据您的特定需要自定义该服务时所使用的属性。

代理属性在不同的配置文件中定义,还可以在用来启动代理的命令行上定义。Message Queue 管理指南介绍这些配置文件,并解释优先级顺序。通过该顺序,可以确定是否可以用一个文件中的属性值覆盖另一个文件中设置的值。使用启动命令设置的属性可以覆盖其他所有设置。

连接服务

使用与连接有关的属性,可以配置和管理代理与客户端之间的物理连接。可供 Message Queue 客户端使用的连接服务将在连接到代理中进行介绍,该节介绍了可用的连接服务:它们的名称、类型和底层协议。连接服务是多线程的,并可以通过专用端口使用。专用端口可以由代理的端口映射器动态分配,也可以由管理员静态分配。默认情况下,当启动代理时,会启动并运行 jmsadmin 服务。

因为每个连接都存在两方,所以连接配置会发生在每一方并需要协调:

客户端可以通过防火墙连接到 Message Queue 服务。这可以通过以下方法来完成:让防火墙管理员打开特定的端口,然后连接到该(静态)端口,或者如 HTTP 连接中概述的那样使用 HTTP 或 HTTPS 服务。

每个连接服务还支持特定的验证和授权功能。有关详细信息,请参见安全服务

端口映射器

驻留在代理主端口 7676 上的通用端口映射器会动态地为连接服务分配端口。当 Message Queue 客户端运行时建立与代理的连接时,会首先与该端口映射器联系,为它已选定的连接服务请求端口号。

可以通过在配置 jmsssljmsadminssladmin 连接服务时为这些服务分配静态端口号来覆盖端口映射器的分配。但是,通常仅在特殊情况下(如,通过防火墙建立连接时)才使用静态端口,一般不建议使用静态端口。

线程池管理

每个连接服务都是多线程的,可以支持多个连接。这些连接所需的线程由线程池中的代理来维护。它们的分配方式取决于您指定的最小和最大线程值以及您选择的线程处理模型。

可以设置用来指定最小和最大线程数的代理属性。因为线程是连接所必需的,所以它们将添加到支持该连接的服务的线程池中。最小值指定可供分配的线程的数量。当可用线程超过这个最小阈值时,系统将在线程变为空闲状态时关闭这些线程,直到再次达到最小阈值,以此来节省内存资源。如果负载较重,线程数量可能会增加,直到达到线程池的最大数量。此后,新连接将被拒绝,直到某个线程变得可用。

您选择的线程模型指定了线程是专用于单个连接还是由多个连接共享:

目标和路由服务

客户端连接到代理之后,就可以开始路由和传送消息。在该阶段,代理负责创建和管理不同类型的物理目标、确保消息顺利流动以及高效使用资源。代理使用与路由和目标有关的代理属性,按照符合应用程序需要的方式来管理这些任务。

我们已经介绍了代理中的物理目标的概念,物理目标是在将消息传送到消息使用方之前,用来存储该消息的内存位置。物理目标分为四种:

管理目标

可以使用 imqcmd 实用程序来管理目标。要管理目标,需要完成下面的一个或多个任务:

管理任务因所管理的目标的种类(管理员创建、自动创建、临时或停用消息队列)而异。例如,临时目标不需要显式销毁;自动创建的属性可通过使用某些代理配置属性来配置,这些属性应用于该代理中自动创建的所有目标。

配置物理目标

为获得最佳性能,可以在创建或更新物理目标时设置属性。下面是可以设置的属性:

对于队列目标,还可以配置备份使用方的最大数量,并为群集代理指定是否优先传送到本地队列。

还可以配置停用消息队列的限制和行为。但是,请注意,停用消息队列的默认属性不同于标准队列的属性。

管理内存

因为目标可能使用大量的资源(取决于它们处理的消息的数量和大小以及注册的使用方数量和长期性),所以需要对它们进行严格的管理,以保证消息传送服务具有良好的性能和可靠性。

可以设置一些属性,以防止向代理传入过多的消息并防止代理内存不足。代理使用以下三级内存保护,使消息服务在资源不足时仍可正常运行:目标限制、系统范围限制以及系统内存阈值。理想情况下,如果目标限制和系统范围限制设置得当,则应当不会达到紧急系统内存阈值。

目标消息限制

可以设置用来管理每个目标的内存和消息流的目标属性。例如,可指定目标允许的生成方的最大数量、目标允许的消息的最大数量或最大大小以及任何一条消息的最大大小。

还可以指定在达到上述任何限制时代理的响应方式:降低生成方的速度、丢弃最旧的消息、丢弃优先级最低的消息或者拒绝最新的消息。

系统范围消息限制

还可以使用属性来设置应用于代理中所有目标的限制:可以指定消息总数和所有消息占用的内存。如果达到了任何系统范围消息限制,代理将拒绝新消息。

系统内存阈值

最后,可以使用属性来设置阈值。当达到阈值时,代理会采取越来越严格的措施来防止内存过载。采取的操作取决于内存资源的状态:green(可用内存充足)、yellow(代理内存不足)、orange(代理内存严重不足)、red(代理无可用内存)。随着代理的内存状态从 green 变为 red,代理所采取的措施也会越来越严格:

持久性服务

对于发生故障后待恢复的代理,需要重新创建它的消息传送操作的状态。为此,它必须将状态信息保存到数据存储。代理重新启动时,会使用所保存的数据来重新创建目标和长期订阅、恢复持久性消息、回滚打开的事务以及为未传送的消息重新创建路由表。然后代理才能恢复消息传送。

Message Queue 服务既支持基于文件的持久性模块,又支持符合 JDBC 的持久性模块(请参见图 3-2)。默认情况下它使用基于文件的持久性。

图 3-2 持久性支持

该图显示代理使用平面文件 (flat file) 存储或符合 JDBC 的数据存储来保持消息。

基于文件的持久性

基于文件的持久性是一种使用单个的文件来存储持久性数据的机制。如果您使用基于文件的持久性,则可以设置用来执行以下操作的代理属性:

通常,基于文件的持久性比基于 JDBC 的持久性速度快;但是,某些用户更希望获得符合 JDBC 的存储所提供的冗余和管理控制。

基于 JDBC 的持久性

基于 JDBC 的持久性使用 Java 数据库连接 (Java Database Connectivity, JDBC™) 接口来将代理连接到符合 JDBC 的数据存储。为了让代理通过 JDBC 驱动程序来访问数据存储,必须执行以下操作:

Message Queue 管理指南中详细说明了完成这些任务及相关配置属性的完整步骤。

安全服务

Message Queue 服务对每个代理实例均支持验证和授权(访问控制)功能,同时还支持加密功能:

验证和授权功能依赖于包含消息传送系统的用户信息(用户名、密码和 group(组)成员资格)的系统信息库。此外,要授予用户或组执行特定操作的权限,代理必须检查访问控制属性文件,该文件指定用户或组可以执行的操作。您需要设置某些信息,代理需要这些信息来验证用户并授予执行相应操作的权限。

图 3-3 显示代理为提供验证和授权功能所需的组件。

图 3-3 安全性管理器支持

该图显示出安全性管理器既使用用户系统信息库,也使用访问控制属性文件。管理员可以使用 imqusermgr 工具来管理平面文件系统信息库。

图 3-3 所示,您可以将用户数据存储在随 Message Queue 服务提供的平面文件用户系统信息库中,也可以将它插入已有的 LDAP 系统信息库中。设置一个用来指示您所进行的选择的代理属性。

验证和授权

当客户端请求连接时,必须提供用户名和密码。代理会将指定的名称和密码与存储在用户系统信息库中的名称和密码进行比较。密码在从客户端传送到代理的过程中,将使用 Base 64 编码或消息摘要 (MD5) 散列进行编码。MD5 适用于平面文件系统信息库;Base 64 是 LDAP 系统信息库所必需的。如果您使用的是 LDAP,则可能希望使用安全的 TLS 协议。通过设置一些代理属性,可以分别配置每个连接服务使用的编码类型,也可以设置适用于整个代理的编码方式。

当用户尝试执行某个操作时,代理将对照访问控制属性文件中指定的允许访问该操作的用户名和组成员资格,来检查用户系统信息库中该用户的用户名和组成员资格。访问控制属性文件为用户或组指定了执行以下操作的权限:

可以设置用来指定以下信息的代理属性:

加密

要对客户端与代理之间发送的消息进行加密,需要使用基于安全套接字层 (Secure Socket Layer, SSL) 标准的连接服务。SSL 通过在启用 SSL 的代理与启用 SSL 的客户端之间建立加密连接来提供连接级别的安全性。

可以设置一些代理属性,以指定要使用的 SSL 密钥存储的安全属性以及密码文件的名称和位置。

监视服务

代理中包含一些用于监视和诊断应用程序及代理性能的组件。其中包括:

图 3-4 中显示的是通用方案。

图 3-4 监视服务支持

该图显示记录程序的输入、错误级别以及输出通道。该图用文本进行说明。

度量生成器

度量生成器提供有关代理活动的信息,如流入流出代理的消息、代理内存中的消息数及其使用的内存量、打开的连接数以及正在使用的线程数。

通过设置代理属性,可以启用和禁用度量数据的生成,以及指定度量报告的生成频率。

记录程序

出错时,Message Queue 记录程序提取由代理代码和度量生成器生成的信息,并将这些信息写入标准输出(控制台)、日志文件以及(Solaris™ 平台上的)syslog 守护程序进程。

您可以设置一些代理属性,以指定记录程序收集的信息类型以及写入每个输出通道的类型。对于日志文件,还可以指定何时关闭日志文件并将输出转移到新文件。在日志文件达到指定的大小或生存期后,将保存该文件并创建一个新的日志文件。

有关如何配置记录程序以及如何使用它来获取性能信息的详细信息,请参见 Message Queue 管理指南

度量消息生成方 (Enterprise Edition)

图 3-4 所示的度量消息生成方按一定的时间间隔接收来自度量生成器的信息,并将这些信息写入消息,然后根据消息中包含的度量信息的类型,将消息发送至多个度量主题目标之一。

订阅这些度量主题目标的 Message Queue 客户端可以使用消息,并处理消息中包含的度量数据。这样,开发者就可以创建自定义监视工具来支持消息传送应用程序。有关每种类型的度量消息中报告的度量数量的详细信息,请参见 Message Queue Developer's Guide for Java Clients。有关如何配置度量消息生成的信息,请参见 Message Queue 管理指南


管理工具和任务

本节介绍用来配置 Message Queue 服务的工具以及为支持开发或生产环境而需要完成的任务。

管理工具

图 3-5 显示不包括客户端连接的消息服务的视图,并主要呈现代理组件和用来管理这些组件的工具。

图 3-5 管理工具

该图显示了管理员用来控制 Message Queue 服务组件的工具,并显示了这些工具与 Message Queue 服务组件之间的对应关系。该图用文本进行说明。

可以使用以下命令行工具来配置和管理 Message Queue 服务。

基于 GUI 的管理控制台结合了 imqcmdimqobjmgr 实用程序的某些功能。可以使用管理控制台来执行以下操作:

支持开发环境

开发客户端组件时,最好尽量减少管理工作。Message Queue 产品的设计有助于实现此目标并且可以即装即用。代理只需启动即可使用。以下做法有助于您将重点放在开发上:

支持生产环境

在生产环境中,消息服务管理在应用程序性能以及满足企业对可扩展性、可用性和安全性的要求等方面扮演着重要角色。在生产环境中,管理员还需要执行更多任务。这些任务大致可分为设置操作和维护操作。

设置操作

通常,您必须执行以下设置操作:

维护操作

要监视和控制代理资源并调整应用程序性能,必须在部署应用程序之后执行以下操作:


扩展 Message Queue 服务

可以通过连接代理并允许它们共享状态信息来水平扩展 Message Queue 服务。这允许任何代理访问远程目标并为更多的客户端提供服务。有关其他信息,请参见第 4 章“代理群集”



上一页      目录      索引      下一页     


文件号码:819-3565。  版权所有 © 2005 Sun Microsystems, Inc. 保留所有权利。