JMX Client for Zookeeper

I am trying to workout a JMX Java client for Zookeeper instance for a custom monitoring web app. As provided in document, Zookeeper provides various statistics through JMX MBeans.

For the excercise, I am running Zookeeper intance locally in standalone mode on Windows 7 Enterprise using following arguments:-

-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

After running my zookeeper intance, I am able to connect to JMX beans using JConsole that correctly shows all the statistics:-

PROBLEM

While trying to connect using my own code I am getting java.net.ConnectException: Connection refused: connect ошибка. Code that I am trying:-

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());

}

Facing same problem while trying to connect using Java Visual VM.

What is the correct way to connect to Zookeeper MBean using Java code?

UPDATE 1

There is 4 years old unresolved JIRA ticket that seems to be saying that there are two kind of ports that comes into play - jmx port & rmi port. The rmi port is generated randomly & I guess that is what needed while creating connection.

But then how JConsole is able to connect?

UPDATE 2

This blog says that talking to remote JMX server over RMI protocol might be problem and suggests using JMXMP (JMX-Messaging Protocol) instead. Now how do I exactly do I do that?

0 ответов

Другие вопросы по тегам