Sun Java System Message Queue 4.2 发行说明

Message Queue 4.2 和较新发行版的新增功能

以下各部分介绍了 Message Queue 4.2、4.1 和 4.0 的新增功能:

Message Queue 4.2 的新增功能

Sun Java System Message Queue 是一种功能全面的消息服务,提供符合 Java Messaging Specification (JMS) 1.1 的可靠、异步的消息传送功能。此外,Message Queue 还提供 JMS 规范之外的许多功能,以满足大型企业部署的需要。

Message Queue 4.2 是一个次要发行版,其中包含很多增强功能和错误修复程序。本部分介绍了如何安装或升级到 Message Queue 4.2,并说明了此发行版中包含的新增功能:

有关 Message Queue 4.0 和 4.1 中引入的功能的信息,请分别参见Message Queue 4.0 的新增功能Message Queue 4.1 的新增功能

为发布者或订阅者提供多个目的地

在 Message Queue 4.2 中,发布者现在可以将消息发布到多个主题目的地;订阅者可以使用多个主题目的地中的消息。此功能是通过使用包含通配符的主题目的地名称(表示多个目的地)来实现的。通过使用此类符号名称,管理员可以根据需要创建与通配符命名方案保持一致的其他主题目的地。发布者可自动将消息发布到所添加的目的地,订阅者可自动使用其中的消息。(通配符主题订阅者比发布者更常见。)


注 –

此功能不适用于队列目的地。


符号主题目的地名称的格式包含多个段,其中通配符(*、 ** 和 >)可以表示名称中的一个或多个段。例如,假定主题目的地命名方案如下所示:

size.color.shape

其中,主题名称段可以具有以下值:

Message Queue 支持以下通配符:

因此,可以采用以下方式表示多个主题目的地:

large.*.circle 表示:

large.red.circle
large.green.circle
...

**.square 表示以 .square 结尾的所有名称,例如:


small.green.square
medium.blue.square
...

small.> 表示以 small. 开头的所有目的地名称,例如:


small.blue.circle
small.red.square
...

要使用此多目的地功能,请采用与上述类似的命名方案创建主题目的地。之后,客户端应用程序便可使用符号目的地名称创建发布者或使用方。例如:

...
String DEST_LOOKUP_NAME = "large.*.circle";
Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME);
TopicPublisher myPublisher = mySession.createPublisher(t)
myPublisher.send(myMessage);
...
String DEST_LOOKUP_NAME = "**.square";
Topic t = (Destination) ctx.lookup(DEST_LOOKUP_NAME);
TopicSubscriber mySubscriber = mySession.createSubscriber(t);
Message m = mySubscriber.receive();

在第一个示例中,代理将消息副本放在与符号名称 large.*.circle 匹配的所有目的地中。在第二个示例中,如果至少有一个目的地与符号名称 **.square 匹配,则会创建一个订阅者,它将从与该符号名称匹配的所有目的地中接收消息。如果没有与该符号名称匹配的目的地,则在此类目的地出现后,才会创建订阅者。

如果管理员创建与某个符号名称匹配的其他目的地,则使用此符号名称创建的通配符发布者随后会将消息发布到该目的地,使用此符号名称创建的通配符订阅者随后将从该目的地中接收消息。

此外,Message Queue 管理工具除了报告主题目的地的发布者(生成方)和订阅者(使用方) 总数外,还会报告通配符发布者(包括对应的符号目的地名称)和通配符订阅者(包括对应的符号目的地名称)数(如果有)。

XML 有效负荷消息的模式验证

通过使用 Message Queue 4.2 中的此新功能,可以在将消息发送到代理时针对 XML 模式验证文本(不是对象)XML 消息的内容。XML 模式 (XSD) 位置是作为 Message Queue 目的地属性指定的。如果未指定 XSD 位置,则使用 XML 文档中的 DTD 声明来执行 DTD 验证。(XSD 验证包括数据类型和值范围验证,它比 DTD 验证更严格。)

使用此新功能的客户端应用程序应将 Java SE 版本升级到 JRE 1.5 或更高版本。

要启用 XML 模式验证,请设置以下物理目的地属性:

表 1–5 用于 XML 模式验证的物理目的地属性

属性 

类型 

默认值 

描述 

validateXMLSchemaEnabled

Boolean 

false

是否启用 XML 模式验证? 

如果设置为 false 或未进行设置,则不会为目的地启用 XML 模式验证。

XMLSchemaURIList

String 

null 

以空格分隔的 XML 模式文档 (XML Schema Document, XSD) URI 字符串列表 

这些 URI 指向用于 XML 模式验证(如果启用)的一个或多个 XSD 的位置。 

如果指定多个 URI,应使用双引号将该值引起来。 

示例: 

"http://foo/flap.xsd http://test.com/test.xsd"

如果未设置此属性或将其设置为 null,并且启用了 XML 验证,则使用在 XML 文档中指定的 DTD 来执行 XML 验证。 

reloadXMLSchemaOnFailure

Boolean 

false

是否在失败时重新装入 XML 模式? 

如果设置为 false 或未进行设置,则不会在验证失败时重新装入该模式。 

在启用 XML 验证后,Message Queue 客户端运行时环境将尝试针对指定的 XSD(如果未指定 XSD,则针对 DTD)验证 XML 消息,然后将其发送至代理。如果找不到指定的模式或无法验证消息,则不会发送消息,而是将抛出异常。

可以在创建或更新目的地时分别使用 imqcmd create dstimqcmd update dst 命令设置 XML 验证属性。XML 验证属性应该在目的地处于非活动状态时进行设置:即,目的地没有使用方和生成方并且目的地中没有消息时。


注 –

如果在运行时无法访问 XSD,则可能需要在目的地处于活动状态时修改 XMLSchemaURIList


如果在目的地处于活动状态时(例如,生成方已连接到目的地时)设置了任何 XML 验证属性,则在生成方重新连接到代理后,更改才会生效。同样,如果由于变更应用程序要求而更改了 XSD,则必须将基于更改的 XSD 生成 XML 消息的所有客户端应用程序重新连接到代理。

如果将 reloadXMLSchemaOnFailure 属性设置为 true 并且 XML 验证失败,Message Queue 客户端运行时环境将尝试重新装入 XSD,然后再次验证消息。如果无法使用重新装入的 XSD 进行验证,客户端运行时环境将抛出异常。

C-API 的分布式事务支持

根据 X/Open 分布式事务模型,分布式事务支持依赖于分布式事务管理器,后者跟踪并管理一个或多个资源管理器所执行的操作。在 Message Queue 4.2 中,Message Queue C-API 现在支持 XA 接口(位于分布式事务管理器和 Message Queue 之间,作为符合 XA 的资源管理器),以使分布式事务处理环境(如 BEA Tuxedo)中运行的 Message Queue C-API 客户端能够参与分布式事务。

这种分布式事务支持包含以下用于实现 XA 接口规范的新 C-API 函数(以及新参数和错误代码):

MQGetXAConnection()
MQCreateXASession()

如果要在分布式事务上下文中使用 C 客户端应用程序,该应用程序必须使用 MQGetXAConnection() 获取连接,并使用 MQCreateXASession() 创建会话以生成和使用消息。任何分布式事务的启动、提交和回滚操作都是通过分布式事务管理器提供的 API 进行管理的。

公共信息

X/Open XA 接口规范需要以下有关符合 XA 的 Message Queue 资源管理器的公共信息:

支持以下名称/值对:

表 1–6 Message Queue 资源管理器名称/值对

名称 

值 

描述 

默认值 

address 

host:port

代理的端口映射器服务的主机:端口。 

localhost:7676

username 

字符串 

用于连接到代理的用户名 

guest

password 

字符串 

用户名的密码 

guest

conntype 

TCP 或 SSL 

连接代理的协议类型 

TCP

trustedhost 

true/false 

代理主机是否可信(仅适用于 conntype=SSL) 

true

certdbpath 

字符串 

包含 NSS 证书和密钥数据库文件的目录的完整路径 

未设置 

clientid 

字符串 

仅对 JMS 持久订阅是必需的 

未设置 

reconnects 

整数 

重新连接到代理的尝试次数(0 表示不重新连接) 

0

编程示例

要编写使用分布式事务的应用程序,请创建一个在事务管理器环境中运行的服务器端服务,以及调用事务管理器 API 的客户端代码。Message Queue 4.2 提供了一些基于 Tuxedo 事务管理器的编程示例。这些示例位于每个平台 ./C/tuxedo 目录下的样例程序目录中。

此目录包含一个 README 文件,它说明了如何设置 Tuxedo 以使用 Message Queue 资源管理器,以及如何在 Tuxedo 环境中生成以下样例程序:

样例程序 

描述 

jmsserver.c

实现 Tuxedo 服务以通过 Message Queue 发送和接收消息。 

jmsclient_sender.c

使用 jmsserver.c 程序中的消息生成服务的 Tuxedo 客户端。

jmsclient_receiver.c

使用 jmsserver.c 程序中的消息接收服务的 Tuxedo 客户端。

async_jmsserver.c

实现 Tuxedo 服务以通过 Message Queue 异步使用消息。 

jmsclient_async_receiver.c

使用 async_jmsserver.c 程序中的异步消息使用服务的 Tuxedo 客户端。

安装程序的 Sun Connection 注册支持

Message Queue 安装程序已进行了改进,允许在 Sun Connection 中注册 Message Queue,这是 Sun 托管的一项服务,可帮助跟踪、管理和维护 Sun 硬件和软件。

在 Message Queue 安装过程中,您可以选择在 Sun Connection 中注册 Message Queue。安装的 Message Queue 的相关信息(如发行版本、主机名、操作系统、安装日期以及其他此类基本信息)将安全地传送到 Sun Connection 数据库。Sun Connection 清单服务可帮助您管理 Sun 硬件和软件;更新服务可通知您最新的可用安全修复程序、建议的更新以及增强功能。

在 Message Queue 4.2 中,为 Sun Connection 注册添加了以下安装程序屏幕:

Sun Connection 注册屏幕。

此注册要求您具有一个 Sun 联机帐户,或者您也可以创建一个帐户。如果您还没有帐户,安装程序将提供以下屏幕以创建 Sun 联机帐户:

用于创建 Sun 联机帐户的屏幕。

您可以在安装过程中使用上述屏幕注册 Message Queue,也可以等到安装完成后使用以下命令在仅限注册模式下运行安装程序:

# installer -r

仅限注册模式要求已安装了 Message Queue 4.2,并且它仅显示与注册相关的安装程序屏幕。

MySQL 数据库支持

Message Queue 4.2 支持将 MySQL 数据库作为基于 JDBC 的数据存储库。可以将 MySQL Cluster Edition 用作独立代理的 JDBC 数据库,以及高可用性代理群集所需的高可用性共享数据存储库。有关将 Message Queue 配置为使用 MySQL 的信息,请参见《Sun Java System Message Queue 4.2 Administration Guide》中的“Configuring a JDBC-Based Data Store”以及《Sun Java System Message Queue 4.2 Administration Guide》中的“High-Availability Cluster Properties”

Message Queue 4.1 的新增功能

Message Queue 4.1 是一个次要发行版,其中包含很多新增功能、一些增强功能以及错误修复程序。本部分介绍了 4.1 发行版中的新增功能,并提供了详细的使用参考:

有关 Message Queue 4.0 中引入的功能的信息,请参见Message Queue 4.0 的新增功能

高可用性代理群集

Message Queue 4.1 引入了高可用性代理群集。与仅提供消息传送服务可用性(如果代理出现故障,可使用另一个代理提供消息传送服务)的传统代理群集相比,高可用性代理群集还提供了数据可用性(如果代理出现故障,另一个代理可使用其持久性消息和状态数据接管消息传送)。

Message Queue 4.1 中引入的高可用性实现使用基于 JDBC 的共享数据存储库:群集中的所有代理共享同一个符合 JDBC 的数据库,而不是代理群集中的每个代理都具有其自己的持久性数据存储库。如果特定代理出现故障,群集中的另一个代理将接管故障代理的消息路由选择和传送。在执行此操作时,故障转移代理将使用共享数据存储库中的数据和状态信息。故障代理的消息传送客户端将重新连接到故障转移代理,它可提供不间断的消息传送服务。

Message Queue 4.1 高可用性实现中使用的基于 JDBC 的共享数据存储库本身必须具有高可用性。如果没有高可用性数据库,或者不间断的消息传送对您并不重要,则可以继续使用传统群集,这些群集提供了服务可用性,但不提供数据可用性。

要配置 Message Queue 4.1 高可用性代理群集,请为群集中的每个代理指定以下代理属性:

要使用高可用性代理群集实现,您必须执行以下操作:

  1. 安装高可用数据库。

  2. 安装 JDBC 驱动程序 .jar 文件。

  3. 为高可用性持久性数据存储库创建数据库模式。

  4. 为群集中的每个代理设置高可用性属性。

  5. 启动群集中的每个代理。

有关高可用性代理群集的概念性讨论及其与传统群集之间的差异,请参见《Sun Java System Message Queue 4.2 Technical Overview》中的第 4  章 “Broker Clusters”。有关高可用性代理群集的过程和参考信息,请参见《Sun Java System Message Queue 4.2 Administration Guide》中的第 8  章 “Managing Broker Clusters”以及《Sun Java System Message Queue 4.2 Administration Guide》中的“Cluster Configuration Properties”

如果已在 Message Queue 4.0 中使用高可用性数据库,并且要切换到高可用性代理群集,则可以使用数据库管理器实用程序 (imqdbmgr) 转换为共享持久性数据存储库。另请参见代理群集以了解更多的已知问题和限制。

JAAS 支持

除了基于文件的内置验证机制以及基于 LDAP 的内置验证机制外,Message Queue 4.1 还引入了 Java 验证和授权服务 (Java Authentication and Authorization Service, JAAS) 支持,它允许将外部验证机制插入到代理中以验证 Message Queue 客户端。

有关代理为符合 JAAS 的验证服务提供的信息的说明以及如何将代理配置为使用此类服务的描述,请参见《Sun Java System Message Queue 4.2 Administration Guide》中的“Using JAAS-Based Authentication”

持久性数据存储库格式更改

Message Queue 4.1 更改了基于 JDBC 的数据存储库以支持高可用性代理群集。为此,将基于 JDBC 的数据存储库格式提高到了版本 410。格式版本 350、370 和 400 将自动迁移到版本 410。

请注意,基于文件的持久性数据存储库的格式将保持为版本 370,因为没有对其进行任何更改。

代理环境配置

Message Queue 4.1 环境配置文件 imqenv.conf 中添加了 IMQ_DEFAULT_EXT_JARS 属性。可以设置此属性,以指定在代理启动时包含在 CLASSPATH 中的外部 .jar 文件的路径名。如果使用此属性指定外部 .jar 文件的位置,则不再需要将这些文件复制到 lib/ext 目录中。外部 .jar 文件可以指 JDBC 驱动程序,也可以指 JAAS 登录模块。下面的样例属性指定了 JDBC 驱动程序的位置。

IMQ_DEFAULT_EXT_JARS=/opt/SUNWhadb4/lib/hadbjdbc4.jar:/opt/SUNWjavadb/derby.jar

Java ES 监视框架支持

Message Queue 4.1 引入了 Sun Java Enterprise System (Java ES) 监视框架支持,它允许使用常见图形界面监视 Java ES 组件。此界面是由一个基于 Web 的控制台(名为 Sun Java System Monitoring Console)实现的。管理员可以使用控制台来查看性能统计信息、创建规则以进行自动监视以及确认警报。如果将 Message Queue 与其他 Java ES 组件一起运行,您可能会发现使用单个界面来管理所有这些组件要更方便一些。

有关使用 Java ES 监视框架监视 Message Queue 的信息,请参见 XREF。

增强的事务管理

以前,仅允许通过管理方式回滚处于 PREPARED 状态的事务。也就是说,如果作为分布式事务一部分的会话没有正常终止,管理员将无法清除处于某种状态的事务。在 Message Queue 4.1 中,您现在可以使用命令实用程序 (imqcmd) 清除(回滚)处于以下状态的事务:STARTEDFAILEDINCOMPLETECOMPLETEPREPARED

为帮助您确定能否回滚特定事务(特别是未处于 PREPARED 状态时),该命令实用程序提供了额外的数据作为 imqcmd query txn 输出的一部分:它为启动事务的连接提供连接 ID,并指定事务的创建时间。通过使用此信息,管理员可以确定是否需要回滚事务。通常,管理员应避免提前回滚事务。

用于 C 客户端连接的固定端口

在 Message Queue 4.1 中,C 客户端(如 Java 客户端)现在可以连接到固定的代理端口,而不是连接到代理的端口映射器服务动态分配的端口。如果要尝试穿过防火墙,或者由于某种其他原因而需要绕过端口映射器服务,固定端口连接是非常有用的。

要配置固定端口连接,您需要配置代理和 C 客户端运行时环境(连接的两端)。例如,如果要通过 ssljms 将客户端连接到端口 1756,您应该执行以下操作:


注 –

MQ_SERVICE_PORT_PROPERTY 连接属性已反向移植到 Message Queue 3.7 Update 2 中。


Message Queue 4.0 的新增功能

Message Queue 4.0 是一个次要发行版,仅限于支持 Application Server 9 PE。它包含几个新增功能、一些增强功能以及错误修复程序。本部分包含此发行版中的新增功能的说明:


注意 – 注意 –

在版本 4.0 中进行了一些细微但可能会引起问题的更改,其中之一就是不再使用命令行选项来指定密码。因此,您必须按过时的密码选项中的所述将所有密码存储在一个文件中,或者在出现提示时输入密码。


JMX 管理 API 支持

Message Queue 4.0 中添加了一个符合 Java Management Extensions (JMX) 规范的新 API,用于配置和监视 Message Queue 代理。使用此 API,可以在 Java 应用程序中以编程方式来配置和监视代理函数。在 Message Queue 的早期版本中,只能从命令行管理实用程序或管理控制台访问这些函数。

有关详细信息,请参见《Sun Java System Message Queue 4.2 Developer’s Guide for JMX Clients》

客户端运行时环境日志记录

Message Queue 4.0 引入了对客户端在运行时记录连接以及会话相关事件的支持。

有关客户端运行时日志记录以及如何对其进行配置的信息,请参见 Java Dev Guide 的第 137 页。

连接事件通知 API

Message Queue 4.0 引入了一个事件通知 API,它允许客户端运行时环境通知应用程序连接状态更改。连接事件通知允许 Message Queue 客户端侦听关闭和重新连接事件,并根据通知类型和连接状态采取适当的操作。例如,如果发生故障转移,并且客户端重新连接到了其他代理,则应用程序可能希望清除事务状态,并继续执行新事务。

有关连接事件以及如何创建事件侦听器的信息,请参见 Java Dev Guide 的第 96 页。

代理管理增强功能

在 Message Queue 4.0 的命令实用程序 (imqcmd) 中添加了一个新的子命令和几个命令选项,以允许管理员停止代理、在指定时间间隔后关闭代理、销毁连接或设置 Java 系统属性(例如,与连接相关的属性)。

有关 imqcmd 命令语法的完整信息,请参见《Sun Java System Message Queue 4.2 Administration Guide》中的第 13  章 “Command Line Reference”

显示有关基于 JDBC 的数据存储库的信息

Message Queue 4.0 的数据库管理器实用程序 imqdbmgr 中添加了一个新的 query 子命令。使用此子命令可显示有关基于 JDBC 的数据存储库的信息,其中包括数据库版本、数据库用户以及是否已创建数据库表。

以下是此命令所显示的信息的示例。


imqdbmgr query

[04/Oct/2005:15:30:20 PDT] Using plugged-in persistent store:
        version=400
        brokerid=Mozart1756
        database connection url=jdbc:oracle:thin:@Xhome:1521:mqdb
        database user=scott
Running in standalone mode.
Database tables have already been created.

JDBC 提供者支持

Message Queue 4.0 现在支持将 Apache Derby 版本 10.1.1 作为基于 JDBC 的数据存储库提供者。

持久性数据存储库格式更改

Message Queue 4.0 引入了对基于 JDBC 的数据存储库的更改,以便进行优化并支持以后的增强功能。为此,将基于 JDBC 的数据存储库格式提高到了版本 400。请注意,在 Message Queue 4.0 中,基于文件的数据存储库版本将保持为 370,因为没有对其进行任何更改。

其他消息属性

Message Queue 4.0 添加了两个新属性,它们是在位于停用消息队列中的所有消息上设置的。

SSL 支持

从 Message Queue 4.0 开始,客户端连接工厂属性 imqSSLIsHostTrusted 的默认值为 false。如果应用程序依赖于以前的默认值 true,则需要对此属性进行重新配置,以将其明确设置为 true

将代理配置为使用自签名证书时,您可以选择信任主机。在这种情况下,除了指定连接应使用基于 SSL 的连接服务(通过 imqConnectionType 属性)外,还应该将 imqSSLIsHostTrusted 属性设置为 true。

例如,要在代理使用自签名证书时安全地运行客户端应用程序,请使用如下命令。

java -DimqConnectionType=TLS 
      -DimqSSLIsHostTrusted=true ClientAppName

要在代理使用自签名证书时安全地使用命令实用程序 (imqcmd) ,请使用如下命令(用于列出连接器服务)。

imqcmd list svc -secure -DimqSSLIsHostTrusted=true