6.2. 使用 JMX 管理 AMQ Broker
您可以使用 Java 管理扩展(JMX)来管理代理。管理 API 由代理使用 MBeans 接口公开。代理将其资源注册到域 org.apache.activemq
。
例如,管理名为 exampleQueue
的队列的 ObjectName
是:
org.apache.activemq.artemis:broker="__BROKER_NAME__",component=addresses,address="exampleQueue",subcomponent=queues,routing-type="anycast",queue="exampleQueue"
org.apache.activemq.artemis:broker="__BROKER_NAME__",component=addresses,address="exampleQueue",subcomponent=queues,routing-type="anycast",queue="exampleQueue"
MBean 是:
org.apache.activemq.artemis.api.management.QueueControl
org.apache.activemq.artemis.api.management.QueueControl
MBean 的 ObjectName
使用帮助程序类 org.apache.activemq.artemis.api.core.management.ObjectNameBuilder
构建。您还可以使用 jconsole 来查找您要管理的 MBeans 的 ObjectName
。
使用 JMX 管理代理与使用 JMX 管理任何 Java 应用程序的过程相同。它可以通过反映或创建 MBeans 的代理来完成。
6.2.1. 配置 JMX 管理 复制链接链接已复制到粘贴板!
默认情况下,JMX 被启用来管理代理。您可以通过在 broker.xml
配置文件中设置 jmx-management-enabled
属性来启用或禁用 JMX 管理。
流程
-
打开 &
lt;broker_instance_dir> /etc/broker.xml
配置文件。 设置 &
lt;jmx-management-enabled>
。<jmx-management-enabled>true</jmx-management-enabled>
<jmx-management-enabled>true</jmx-management-enabled>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果启用了 JMX,则可以使用
jconsole
在本地管理代理。注意出于安全原因,默认情况下不启用到 JMX 的远程连接。
如果要管理同一
MBeanServer
的多个代理,请为每个代理配置 JMX 域。默认情况下,代理使用 JMX 域
org.apache.activemq.artemis
。<jmx-domain>my.org.apache.activemq</jmx-domain>
<jmx-domain>my.org.apache.activemq</jmx-domain>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您在 Windows 系统上使用 AMQ Broker,则需要在
artemis
中或artemis.cmd
中设置系统属性。shell 脚本位于 <install_dir>/bin
下。
其他资源
- 有关为远程管理配置代理的更多信息,请参阅 Oracle 的 Java 管理指南。
6.2.2. 配置 JMX 管理访问 复制链接链接已复制到粘贴板!
默认情况下,出于安全原因,禁用对代理的远程 JMX 访问。但是,AMQ Broker 有一个 JMX 代理,它允许远程访问 JMX MBeans。您可以通过在代理 management.xml
配置文件中配置连接器元素来启用 JMX 访问。
虽然也可以使用 'com.sun.management.jmxremote ' JVM 系统属性启用 JMX 访问,但此方法不被支持且不安全。修改 JVM 系统属性可以绕过代理上的 RBAC。要最小化安全风险,请考虑限制对本地主机的访问。
公开用于远程管理的 JMX 代理的 JMX 代理存在安全隐患。
要保护您的配置,如此流程所述:
- 将 SSL 用于所有连接。
- 显式定义连接器主机,即要公开代理的主机和端口。
- 明确定义 RMI (远程方法调用)registry绑定到的端口。
先决条件
- 正常工作的代理实例
-
Java
jconsole
工具
流程
-
打开 &
lt;broker-instance-dir> /etc/management.xml
配置文件。 为 JMX 代理定义连接器。connector-port 设置建立 RMI registry,客户端如 jconsole 查询 JMX 连接器服务器。例如,允许在端口 1099 上远程访问:
<connector connector-port="1099"/>
<connector connector-port="1099"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
jconsole
验证到 JMX 代理的连接:service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在连接器中定义附加属性,如下所述。
- connector-host
-
用于公开代理的代理服务器主机。要防止远程访问,请将
connector-host
设置为127.0.0.1
(localhost)。 - rmi-registry-port
- JMX RMI 连接器服务器绑定到的端口。如果没有设置,则端口始终是随机的。设置此属性以避免远程 JMX 连接通过防火墙传输的问题。
- jmx-realm
-
用于身份验证的 JMX 域。默认值为
activemq
,以匹配 JAAS 配置。 - object-name
-
用于公开远程连接器的对象名称。默认值为
connector:name=rmi
。 - 已保护
-
指定连接器是否使用 SSL 保护。默认值为
false
。将值设为true
以确保安全通信。 - key-store-path
-
密钥存储的位置。如果您设置了
secure="true",则需要此项
。 - key-store-password
-
密钥存储密码。如果您设置了
secure="true",则需要此项
。可以加密密码。 - key-store-provider
-
密钥存储提供程序。如果您设置了
secure="true",则需要此项
。默认值为JKS
。 - trust-store-path
-
信任存储的位置。如果您设置了
secure="true",则需要此项
。 - trust-store-password
-
truststore 密码。如果您设置了
secure="true",则需要此项
。可以加密密码。 - trust-store-provider
-
truststore 供应商。如果您设置了
secure="true",则需要此项
。默认值为JKS
- password-codec
- 要使用的密码 codec 的完全限定类名称。有关其如何工作的更多详细信息,请参阅以下密码屏蔽文档。
注意RMI registry 选择要绑定到的 IP 地址。如果系统上存在多个 IP 地址/NIC,您可以通过将以下内容添加到
artemis.profile
文件:-Djava.rmi.server.hostname=localhost
来选择要使用的 IP 地址-
使用
jdk.serialFilter
为端点序列化设置适当的值,如 Java 平台文档 中所述。
其他资源
- 有关配置文件中加密密码的更多信息,请参阅 在配置文件中加密密码。
6.2.3. MBeanServer 配置 复制链接链接已复制到粘贴板!
当代理以独立模式运行时,会使用 Java 虚拟机的 平台 MBeanServer
注册其 MBeans。默认情况下,还会部署 Jolokia 以允许使用 REST 访问 MBean 服务器。
6.2.4. 如何使用 Jolokia 公开 JMX 复制链接链接已复制到粘贴板!
默认情况下,AMQ Broker 包括部署为 Web 应用程序的 Jolokia HTTP 代理。Jolokia 是公开 MBeans 的 HTTP 网桥的远程 JMX。
要使用 Jolokia,用户必须属于 < broker_instance_dir> /etc/artemis.profile 配置文件中的
系统属性定义的角色。默认情况下,此角色为 hawtio.
rolesamq
。
您可以将 Jolokia 请求发送到代理,作为 HTTP GET 请求。这些请求对 Jolokia REST URL 中的所有参数进行编码。
Jolokia REST URL 示例
以下是查找代理版本的请求中的 Jolokia REST URL 示例。Origin
标志应该指定代理服务器的域名或 DNS 主机名。另外,您为 Origin 指定的值必须与 Jolokia cross- Origin
Resource Sharing (CORS)规格中的 <allow-origin
> 的条目对应。
curl http://admin:admin@localhost:8161/console/jolokia/read/org.apache.activemq.artemis:broker=\"0.0.0.0\"/Version -H "Origin: mydomain.com"
$ curl http://admin:admin@localhost:8161/console/jolokia/read/org.apache.activemq.artemis:broker=\"0.0.0.0\"/Version -H "Origin: mydomain.com"
{"request":{"mbean":"org.apache.activemq.artemis:broker=\"0.0.0.0\"","attribute":"Version","type":"read"},"value":"2.4.0.amq-710002-redhat-1","timestamp":1527105236,"status":200}
以下是请求中的一个 Jolokia REST URL 示例,以获取 myQueue0 队列的消息计数。
curl -u http://admin:admin@localhost:8161/console/jolokia/read/org.apache.activemq.artemis:broker\=\!%22amq-broker\!%22,component\=addresses,address\=\!%22myAddress0\!%22,subcomponent\=queues,routing-type\=\!%22anycast\!%22,queue\=\!%22myQueue0\!%22/MessageCount
$ curl -u http://admin:admin@localhost:8161/console/jolokia/read/org.apache.activemq.artemis:broker\=\!%22amq-broker\!%22,component\=addresses,address\=\!%22myAddress0\!%22,subcomponent\=queues,routing-type\=\!%22anycast\!%22,queue\=\!%22myQueue0\!%22/MessageCount
您可以通过在 AMQ 管理控制台中为对应的操作复制 Jolokia URL 来查找在特定 HTTP GET 请求中使用的 Jolokia URL。以下示例将 Jolokia URL 复制到用于浏览 myQueue0 队列的 HTTP GET 请求中。复制 URL 后,您可以为您的请求自定义它。
图 6.1. 操作页面
其他资源
- 有关使用 JMX-HTTP 网桥的更多信息,请参阅 Jolokia 文档。
- 有关将用户分配给角色的更多信息,请参阅 添加用户。
- 有关指定 Jolokia cross-Origin Resource Sharing (CORS)的更多信息,请参阅链接第 4.1.5 节: 安全.
6.2.5. 订阅 JMX 管理通知 复制链接链接已复制到粘贴板!
如果环境中启用了 JMX,您可以订阅管理通知。
流程
-
订阅
ObjectName org.apache.activemq.artemis:broker=" <broker-name>"
.
其他资源
- 有关管理通知的详情,请参考 第 6.5 节 “管理通知”。