Sun Java System Message Queue 4.1 发行说明

JMX 支持

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

此 API 由一组 JMX 受管理 Bean (MBean) 组成,用于管理以下与 Message Queue– 相关的资源:

这些 MBean 提供了一些属性操作,用于同步轮询和处理基础资源的状态,此外还提供了通知,以使客户端应用程序能够在状态发生更改时异步侦听和响应这些更改。使用 JMX API,客户端应用程序可以执行如下配置和监视任务:

有关 JMX API 的简介以及完整的参考信息,请参见《Sun Java System Message Queue 4.1 Developer’s Guide for JMX Clients》

代理支持:与 JMX 有关的属性

为了支持 JMX API,添加了几个新的代理属性(请参见表 1–3)。无法使用 Message Queue 命令实用程序 (imqcmd) 从命令行设置这些属性。可以使用代理实用程序 (imqbrokerd) 的 -D 选项设置这些属性,也可以在代理的实例配置文件 (config.properties) 中手动编辑这些属性。此外,某些属性(imq.jmx.rmiregistry.startimq.jmx.rmiregistry.useimq.jmx.rmiregistry.port)还可以使用表 1–4 中所述的新代理实用程序选项进行设置。此表列出了每个选项,指定了选项类型,并描述了选项用途。

表 1–3 用于支持 JMX 的新代理属性

属性 

类型 

描述 

imq.jmx.rmiregistry.start

Boolean

指定在代理启动时是否启动 RMI 注册表。

如果为 true,代理将在 imq.jmx.rmiregistry.port 指定的端口上启动 RMI 注册表,并使用此注册表存储 JMX 连接器的 RMI 桩模块。请注意,在这种情况下将忽略 imq.jmx.rmiregistry.use 的值。

默认值:false

imq.jmx.rmiregistry.use

Boolean

指定是否使用外部 RMI 注册表。

仅当 imq.jmx.rmiregistry.startfalse 时适用。

如果为 true,代理将在 imq.jmx.rmiregistry.port 指定的端口上使用外部 RMI 注册表,以便存储 JMX 连接器的 RMI 桩模块。代理启动时外部 RMI 注册表必须已处于运行状态。

默认值:false

imq.jmx.rmiregistry.port

Integer

RMI 注册表的端口号

仅当 imq.jmx.rmiregistry.startimq.jmx.rmiregistry.use true 时适用。然后即可将 JMX 连接器配置为使用 RMI 注册表,方法是将此端口号添加到这些连接器的 JMX 服务 URL 的 URL 路径中。

默认值:1099

imq.jmx.connector.list

String

预配置的 JMX 连接器的名称,以逗号分隔。

默认值:jmxrmi,ssljmxrmi

imq.jmx.connector.activelist

String

代理启动时要激活的 JMX 连接器的名称,以逗号分隔。

默认值:jmxrmi

imq.jmx.connector.connectorName .urlpath

String

连接器 connectorName 的 JMX 服务 URL 的 urlPath 部分

当必须明确设置 JMX 服务 URL 路径时(例如使用共享的外部 RMI 注册表时),此选项会非常有用。

默认值:如果使用 RMI 注册表存储 JMX 连接器的 RMI 桩模块(即,如果 imq.jmx.registry.startimq.jmx.registry.usetrue):

   /jndi/rmi://brokerHost:rmiPort
      /brokerHost/brokerPort/connectorName

如果不使用 RMI 注册表(这是默认情况,imq.jmx.registry.startimq.jmx.registry.use 均为 false):

   /stub/rmiStub

其中 rmiStub 是 RMI 桩模块自身的编码和序列化表示

 

imq.jmx.connector.connectorName .useSSL

Boolean

指定连接器 connectorName 是否使用安全套接字层 (Secure Socket Layer, SSL)。

默认值:false

imq.jmx.connector.connectorName .brokerHostTrusted

Boolean

指定是否信任代理为连接器 connectorName 提供的任何证书。

仅当 imq.jmx.connector. connectorName.useSSLtrue 时适用。

如果为 false,Message Queue 客户端运行时环境将验证提供给它的所有证书。如果证书的签名者不在客户端的信任存储库中,验证将失败。

如果为 true,则会跳过证书验证。此选项可能非常有用,例如,在使用自签名证书进行软件测试时。

默认值:false

imq.jmx.connector.list 属性用于定义一组要在代理启动时创建的命名 JMX 连接器;imq.jmx.connector.activelist 用于指定要激活其中哪些连接器。每个命名的连接器都有其自身的一组属性:

imq.jmx.connector.connectorName .urlpath

imq.jmx.connector.connectorName .useSSL

imq.jmx.connector.connectorName .brokerHostTrusted

默认情况下,将创建两个 JMX 连接器,名称分别为 jmxrmissljmxrmi;前者被配置为不使用 SSL 加密 (imq.jmx.connector.jmxrmi.useSSL = false),后者则使用 SSL 加密 (imq.jmx.connector.ssljmxrmi.useSSL = true)。默认情况下,代理启动时只激活 jmxrmi 连接器;有关如何激活 ssljmxrmi 连接器以进行安全通信的信息,请参见针对 JMX 客户端的 SSL 支持

为了方便起见,还向命令行代理实用程序 (imqbrokerd) 中添加了新的选项(表 1–4),用于控制 RMI 注册表的使用、启动和端口。这些选项的用途和影响与表 1–3 中所述的等效代理属性相同。此表列出了每个选项,指定了选项的等效代理属性,并描述了选项用途。

表 1–4 用于支持 JMX 的新代理实用程序选项

选项 

等效代理属性 

描述 

-startRmiRegistry

imq.jmx.rmiregistry.start

指定在代理启动时是否启动 RMI 注册表。

-useRmiRegistry

imq.jmx.rmiregistry.use

指定是否使用外部 RMI 注册表。

-rmiRegistryPort

imq.jmx.rmiregistry.port

RMI 注册表的端口号

命令行命令实用程序 (imqcmd) 中添加了一个新的子命令(表 1–5),用于列出代理启动时创建并启动的 JMX 连接器的 JMX 服务 URL。不使用 Message Queue 简便类 AdminConnectionFactory 的 JMX 客户端需要使用此信息来获取 JMX 连接器;另外,通过通用的 JMX 浏览器(例如 Java 监视和管理控制台 jconsole),还可以使用此信息来管理或监视 Message Queue。

表 1–5 新的命令实用程序子命令

子命令 

描述 

list jmx

列出 JMX 连接器的 JMX 服务 URL

针对 JMX 客户端的 SSL 支持

如上所述,默认情况下将使用预配置的 JMX 连接器 jmxrmi 来配置 Message Queue 消息代理,从而进行不安全的通信。需要使用安全套接字层 (Secure Socket Layer, SSL) 进行安全通信的应用程序,必须激活备用的安全 JMX 连接器 ssljmxrmi。这需要执行以下步骤:

  1. 获取和安装签名证书,方法与为 ssljmsssladmincluster 连接服务获取和安装签名证书(如 Message Queue 管理指南 中所述)相同。

  2. 在信任存储库中安装根证书颁发机构颁发的证书(如有必要)。

  3. ssljmxrmi 连接器添加到代理启动时要激活的 JMX 连接器列表:

    imq.jmx.connector.activelist=jmxrmi,ssljmxrmi

  4. 使用 Message Queue 代理实用程序 ( imqbrokerd) 启动代理,可以将密码文件中的密钥库密码传递给此实用程序,也可以在提示时从命令行键入密码。

  5. 默认情况下,ssljmxrmi 连接器(或基于 SSL 的任何其他连接器)被配置为验证提供给它的所有代理 SSL 证书。要避免进行此验证(例如,在使用自签名证书进行软件测试时),请将代理属性 imq.jmx.connector.ssljmxrmi.brokerHostTrusted 设置为 true

在客户端,必须使用将 ssljmxrmi 指定为首选连接器的 URL 配置管理员连接工厂 (AdminConnectionFactory ) :

AdminConnectionFactory  acf = new AdminConnectionFactory();
acf.setProperty(AdminConnectionConfiguration.imqAddress, "mq://myhost:7676/ssljmxrmi");

如果需要,可使用系统属性 javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword 将 JMX 客户端指向信任存储库。