有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何查询Hystrix的伺服MBean?

我可以访问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());


共 (1) 个答案

  1. # 1 楼答案

    发现查询的对象名没有问题。事实上,它与JConsole中的相同;屏幕截图右侧显示了完整的语法: enter image description here

    此外,我还需要在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();
    
    
        }
    
    }