4.10. JMX 管理与 Jakarta 管理的变化
JBoss EAP 6 中的 HornetQ 组件提供自己的 JMX 管理,但不推荐使用它。它现已被弃用,并不再被支持。如果您依赖于 JBoss EAP 6 中的此功能,您必须迁移管理工具以使用 JBoss EAP 管理 CLI 或 JBoss EAP 7 提供的 Jakarta 管理管理。
您还需要升级客户端库,以使用 JBoss EAP 7 附带的 jboss-client.jar。
以下是 JBoss EAP 6 中使用的 HornetQ JMX 管理代码的示例。
JMXConnector connector = null;
try {
HashMap environment = new HashMap();
String[] credentials = new String[]{"admin", "Password123!"};
environment.put(JMXConnector.CREDENTIALS, credentials);
// HornetQ used the protocol "remoting-jmx" and port "9999"
JMXServiceURL beanServerUrl = new JMXServiceURL("service:jmx:remoting-jmx://127.0.0.1:9990");
connector = JMXConnectorFactory.connect(beanServerUrl, environment);
MBeanServerConnection mbeanServer = connector.getMBeanServerConnection();
// The JMX object name pointed to the HornetQ JMX management
ObjectName objectName = new ObjectName("org.hornetq:type=Server,module=JMS");
// The invoked method name was "listConnectionIDs"
String[] connections = (String[]) mbeanServer.invoke(objectName, "listConnectionIDs", new Object[]{}, new String[]{});
for (String connection : connections) {
System.out.println(connection);
}
} finally {
if (connector != null) {
connector.close();
}
}
以下示例是 JBoss EAP 7 中 ActiveMQ EFK 所需的等效代码。
JMXConnector connector = null;
try {
HashMap environment = new HashMap();
String[] credentials = new String[]{"admin", "Password123!"};
environment.put(JMXConnector.CREDENTIALS, credentials);
// ActiveMQ Artemis uses the protocol "remote+http" and port "9990"
JMXServiceURL beanServerUrl = new JMXServiceURL("service:jmx:remote+http://127.0.0.1:9990");
connector = JMXConnectorFactory.connect(beanServerUrl, environment);
MBeanServerConnection mbeanServer = connector.getMBeanServerConnection();
// The Jakarta Management object name points to the new Jakarta Management in the `messaging-activemq` subsystem
ObjectName objectName = new ObjectName("jboss.as:subsystem=messaging-activemq,server=default");
// The invoked method name is now "listConnectionIds"
String[] connections = (String[]) mbeanServer.invoke(objectName, "listConnectionIds", new Object[]{}, new String[]{});
for (String connection : connections) {
System.out.println(connection);
}
} finally {
if (connector != null) {
connector.close();
}
}
请注意,在新实现中更改了方法名称和参数。您可以按照以下步骤在 JConsole 中找到新方法名称。
使用以下命令连接到 JConsole。
$ EAP_HOME/bin/jconsole.sh- 连接到 JBoss EAP 本地进程。请注意,它应当以 "jboss-modules.jar" 开头。
-
在 MBeans 选项卡中,选择 jboss.as
messaging-activemq default Operations 以显示方法名称和属性列表。