Zookeeper的JMX客户端

时间:2016-11-29 07:37:28

标签: java jmx apache-zookeeper jmxmp

我正在尝试为自定义监控Web应用程序的Zookeeper实例构建JMX Java客户端。如文件Zookeeper provides various statistics through JMX MBeans中所述。

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

-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 intance后,我能够使用JConsole连接到JMX bean,正确显示所有统计信息: -

Jconsole screen

问题

尝试使用我自己的代码进行连接时,出现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 ticket似乎在说有两种端口可以发挥作用 - jmx port&里米港。 rmi端口是随机生成的。我想这是创建连接时所需要的。

但是JConsole如何能够连接?

更新2

blog表示通过RMI协议与远程JMX服务器通信可能存在问题,建议使用JMXMP(JMX-Messaging Protocol)。 现在我该如何做到这一点?

0 个答案:

没有答案