已添加符合 Java Management Extension (JMX) 规范的新 API,用于配置和监视 Message Queue 代理。使用此 API,可以在 Message Queue 客户端应用程序中以编程方式来配置和监视代理函数。在 Message Queue 的早期版本中,只能从命令行或管理控制台访问这些函数。
此 API 由一组 JMX 受管理 Bean (MBean) 组成,用于管理以下与 Message Queue– 相关的资源:
消息代理
连接服务
连接
目的地
消息生成方
消息使用方
事务
代理群集
日志记录
Java 虚拟机 (Java Virtual Machine, JVM)
这些 MBean 提供了一些属性和操作,用于同步轮询和处理基础资源的状态,此外还提供了通知,以使客户端应用程序能够在状态发生更改时异步侦听和响应这些更改。使用 JMX API,客户端应用程序可以执行如下配置和监视任务:
设置代理的端口号
设置代理的最大消息大小
暂停连接服务
设置连接服务的最大线程数
获取服务上的当前连接数
销毁连接
创建目的地
销毁目的地
启用或禁用自动创建目的地
清除来自目的地的所有消息
获取自代理启动以来目的地收到的累积消息数
获取队列的当前状态(正在运行或已暂停)
获取某主题当前消息生成方的数量
清除来自长期订阅者的所有消息
获取当前 JVM 堆大小
有关 JMX API 的简介以及完整的参考信息,请参见《Sun Java System Message Queue 4.1 Developer’s Guide for JMX Clients》。
为了支持 JMX API,添加了几个新的代理属性(请参见表 1–3)。无法使用 Message Queue 命令实用程序 (imqcmd) 从命令行设置这些属性。可以使用代理实用程序 (imqbrokerd) 的 -D 选项设置这些属性,也可以在代理的实例配置文件 (config.properties) 中手动编辑这些属性。此外,某些属性(imq.jmx.rmiregistry.start、imq.jmx.rmiregistry.use 和 imq.jmx.rmiregistry.port)还可以使用表 1–4 中所述的新代理实用程序选项进行设置。此表列出了每个选项,指定了选项类型,并描述了选项用途。
表 1–3 用于支持 JMX 的新代理属性
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 连接器,名称分别为 jmxrmi 和 ssljmxrmi;前者被配置为不使用 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 连接器 jmxrmi 来配置 Message Queue 消息代理,从而进行不安全的通信。需要使用安全套接字层 (Secure Socket Layer, SSL) 进行安全通信的应用程序,必须激活备用的安全 JMX 连接器 ssljmxrmi。这需要执行以下步骤:
获取和安装签名证书,方法与为 ssljms、ssladmin 或 cluster 连接服务获取和安装签名证书(如 Message Queue 管理指南 中所述)相同。
在信任存储库中安装根证书颁发机构颁发的证书(如有必要)。
将 ssljmxrmi 连接器添加到代理启动时要激活的 JMX 连接器列表:
imq.jmx.connector.activelist=jmxrmi,ssljmxrmi
使用 Message Queue 代理实用程序 ( imqbrokerd) 启动代理,可以将密码文件中的密钥库密码传递给此实用程序,也可以在提示时从命令行键入密码。
默认情况下,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.trustStore 和 javax.net.ssl.trustStorePassword 将 JMX 客户端指向信任存储库。