2

我正在尝试为自定义监控 Web 应用程序的 Zookeeper 实例锻炼 JMX Java 客户端。如文档中所述,Zookeeper 通过 JMX MBeans 提供各种统计信息

对于练习,我使用以下参数在 Windows 7 Enterprise 上以独立模式在本地运行 Zookeeper 实例:-

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.port=10010 
-Dzookeeper.jmx.log4j.disable=false

运行我的 zookeeper 实例后,我可以使用正确显示所有统计信息的JConsole连接到 JMX bean:-

Jconsole 屏幕

问题

尝试使用我自己的代码进行连接时 java.net.ConnectException: Connection refused: connect出现错误。我正在尝试的代码:-

public static void main(String[] args) throws Exception {

    // service:jmx:rmi:///jndi/rmi://#{host}:#{port}/jmxrmi
    JMXServiceURL url = new             JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:10010/jmxrmi");

    // This throws java.net.ConnectException !!!
    JMXConnector jmxConnector = JMXConnectorFactory.connect(url);

    MBeanServerConnection mbeanServerConnection = jmxConnector.getMBeanServerConnection();
   ObjectName mbeanName = new     ObjectName("org.apache.ZooKeeperService:name0=StandaloneServer_port2181");
ZooKeeperServerMXBean newProxyInstance =   MBeanServerInvocationHandler.newProxyInstance(mbeanServerConnection,
        mbeanName, ZooKeeperServerMXBean.class, true);
System.out.println("Created zoo mbean proxy");
System.out.println(newProxyInstance.getAvgRequestLatency());

}

尝试使用Java Visual VM连接时遇到同样的问题。

使用 Java 代码连接到 Zookeeper MBean 的正确方法是什么?

更新 1

有 4 年未解决的JIRA 票似乎在说有两种端口可以发挥作用 - jmx 端口和 rmi 端口。rmi 端口是随机生成的,我猜这是创建连接时需要的。

但是 JConsole 是如何连接的呢?

更新 2

博客说通过 RMI 协议与远程 JMX 服务器通信可能会出现问题,并建议改用 JMXMP(JMX 消息传递协议)。现在我该怎么做呢?

4

0 回答 0