Netflix Hystrix 指标在 /hystrix.stream 上不可见

Netflix Hystrix metrics not visible on /hystrix.stream

我正在评估 Netflix Hystrix 作为我目前正在从事的项目的改进,这是一个基于 Java OSGi 的项目(我使用 Apache felix 作为 OSGi 运行时)。 至于现在我能够:

问题是我看不到流中推送的 data 个对象。只有 ping 更新是可见的,即使同时我用 Jmeter/Postman 测试强调 HistryxCommand 变形服务。 鉴于我没有注意到错误,我正在考虑发布者和 reader 逻辑使用的不同流。有人可以帮助我更多地了解 Hystrix 的内部结构并对我的场景进行故障排除吗?我尝试查看 Hystrix 源代码,但老实说,这暂时没有帮助。

我正在使用以下依赖项

<dependencies>
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-core</artifactId>
            <version>1.5.12</version>
        </dependency>
        <dependency>
            <groupId>com.netflix.hystrix</groupId>
            <artifactId>hystrix-metrics-event-stream</artifactId>
            <version>1.5.12</version>
        </dependency>
    </dependencies>

谢谢

我观察到 HystrixCommand classes 和 HystrixMetricsStreamServlet 来自 same[=27] =] OSGi 包解决了我的问题。

所以我猜这个问题是由以下原因引起的:

  • 单例在 Hystrix 内部的使用 classes;
  • 事实上,在 OSGi 中每个包都有自己的 classloader,

查看Hystrix源码这是我对内部流程的理解:

A​​sbtractCommand classes 使用 HystrixCommandMetrics 单例来推送事件指标。 HystrixCommandMetrics 单例也被 HystrixMetricsStreamServlet(通过 HystrixDashboardStream class)引用以读取相同的事件指标。 因此,如果 HystrixMetricsStreamServlet 和 AbstractCommand(s) 不共享相同的 classloader,它们将读取和推送 from/on 不同的对象。

由于我计划使用 Hystrix 来包装不同的系统,因此在不同的 OSGi 包中,我现在找到的一个干净的解决方案是将所有必需的 Hystrix 库打包在一个 com.mycompany.osgi.hystrix 中并使其可用OSGi 运行时作为独立插件。