【问题标题】:How to count how often the circuit breaker changed its state from closed to open?如何计算断路器从闭合状态变为断开状态的频率?
【发布时间】:2019-02-06 17:50:08
【问题描述】:

有没有办法找出 Hystrix 断路器的状态从 close 更改为 open 的频率?我希望像

HystrixCommandMetrics m = ...; 
long count = m.getCumulativeCount(HystrixEventType.SHORT_CIRCUITED);

但这会计算断路器打开时失败的命令执行次数。它不计算状态变化本身。

【问题讨论】:

  • @ryyker 请解释一下这有什么帮助。

标签: java hystrix


【解决方案1】:

断路器本身不提供指标,它仅使用指标来通知其在 CLOSED、HALF_OPEN 和 OPEN 之间的转换。

您可以通过为指标流创建自己的订阅者来保持自己的打开和关闭转换计数。您只需要跟踪电路的最后一个已知状态,当您从流中获得更新时,将最后一个已知状态与更新中的状态进行比较。如果它们不同,则说明发生了转换,您需要更新自己的计数器。

在 1.4 中,您必须使用 new HystrixMetricsPoller(),并将您自己的 MetricsAsJsonPollerListener 实现传递给它,它会为每个命令解析为 isCircuitOpen 提供的 JSON。

在 1.5 中,您将使用 HystrixDashboardStream.getInstance().observe() 并注册您自己的消费者以获取更新。我认为这种方法在获取每个命令的底层 HystrixCircuitBreaker 对象方面需要付出更多努力,这可以让您检查 isOpen() 以获取每个断路器的当前状态。

【讨论】:

    【解决方案2】:

    我不认为与您展示的方法类似的方法是 Hystrix 原生的,尽管可以通过理解 Hystrix 确定断路器是打开还是关闭的方法来创建。

    流程图here 提供了其工作原理的详细说明。 (These pages详细流程图)其中一个详细地址专门针对Is the Circuit Open?

    摘自电路打开了吗?

    当你执行命令时,Hystrix 会检查断路器 看看电路是否开路。

    如果电路是开路(或“跳闸”),那么 Hystrix 将不会执行 该命令,但会将流程路由到 (8) 获取后备。

    如果电路是闭合的,那么流程进行到 (5) 以检查是否 有可用的容量来运行该命令。

    然后通过识别此行为,可以检测状态何时从 Closed 更改为 Open。

    来自 this page 是 Hystrix 事件类型的简明列表。标记的将在上述步骤中很有用:

    【讨论】:

      猜你喜欢
      • 2021-01-17
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 2020-08-31
      • 2019-07-08
      • 2016-01-07
      • 2021-06-02
      相关资源
      最近更新 更多