如何查询 Hystrix 的伺服 MBean?
How to query the servo MBean for Hystrix?
我能够访问 JConsole 中的 MBean,它们显示为 com.netflix.servo
> HystrixCommand
> countSuccess
>(实际命令及其属性)
我找不到任何关于如何查询这些对象和值的示例,例如countSuccess、countFailure 等
我最接近的是 ObjectName o = new ObjectName("com.netflix.servo:name=countSuccess,instance=T6JmxStatCommand,type=HystrixCommand");
,它位于 https://github.com/n0rad/hands-on-hystrix/blob/master/src/test/java/fr/n0rad/hands/on/hystrix/t6/T6JmxStatMain.java,但显然它不起作用。
mbean 是通过以下代码注册的:HystrixPlugins.getInstance().registerMetricsPublisher(HystrixServoMetricsPublisher.getInstance());
查询到的对象名没有问题。事实上,它与 JConsole 中的相同;屏幕截图右侧显示的完整语法:
此外,我需要向 Eclipse 运行 配置添加一些系统属性:
-Dcom.sun.management.jmxremote.rmi.port=8700 -Dcom.sun.management.jmxremote.port=8600 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
然后我可以使用端口 8600 进行连接。在代码中:
package com.awgtek.miscpocs.lognfetch.client;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class TestJMXConn {
public static void main(String[] args) throws Exception {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8600/jmxrmi");
JMXConnector connect = JMXConnectorFactory.connect(url);
MBeanServerConnection mbsc = connect.getMBeanServerConnection();
// ObjectName o = new ObjectName("com.netflix.servo:name=countSuccess,type=HystrixCommand,instance=LogAndFetchRestServicePostCommand");
ObjectName o = new ObjectName("com.netflix.servo:name=countSuccess,type=HystrixCommand,instance=LogAndFetchRestServiceGetCommand");
Object value = mbsc.getAttribute(o, "value");
System.out.println("the value: " + value);
connect.close();
}
}
我能够访问 JConsole 中的 MBean,它们显示为 com.netflix.servo
> HystrixCommand
> countSuccess
>(实际命令及其属性)
我找不到任何关于如何查询这些对象和值的示例,例如countSuccess、countFailure 等
我最接近的是 ObjectName o = new ObjectName("com.netflix.servo:name=countSuccess,instance=T6JmxStatCommand,type=HystrixCommand");
,它位于 https://github.com/n0rad/hands-on-hystrix/blob/master/src/test/java/fr/n0rad/hands/on/hystrix/t6/T6JmxStatMain.java,但显然它不起作用。
mbean 是通过以下代码注册的:HystrixPlugins.getInstance().registerMetricsPublisher(HystrixServoMetricsPublisher.getInstance());
查询到的对象名没有问题。事实上,它与 JConsole 中的相同;屏幕截图右侧显示的完整语法:
此外,我需要向 Eclipse 运行 配置添加一些系统属性:
-Dcom.sun.management.jmxremote.rmi.port=8700 -Dcom.sun.management.jmxremote.port=8600 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
然后我可以使用端口 8600 进行连接。在代码中:
package com.awgtek.miscpocs.lognfetch.client;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class TestJMXConn {
public static void main(String[] args) throws Exception {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8600/jmxrmi");
JMXConnector connect = JMXConnectorFactory.connect(url);
MBeanServerConnection mbsc = connect.getMBeanServerConnection();
// ObjectName o = new ObjectName("com.netflix.servo:name=countSuccess,type=HystrixCommand,instance=LogAndFetchRestServicePostCommand");
ObjectName o = new ObjectName("com.netflix.servo:name=countSuccess,type=HystrixCommand,instance=LogAndFetchRestServiceGetCommand");
Object value = mbsc.getAttribute(o, "value");
System.out.println("the value: " + value);
connect.close();
}
}