如何计算断路器从闭合状态变为断开状态的频率?

时间:2018-08-31 16:52:46

标签: java hystrix

是否有办法找出Hystrix断路器多久将其状态从闭合更改为 open ?我希望像

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

但这计算了断路器断开时失败的命令执行次数。它不计算状态更改本身。

2 个答案:

答案 0 :(得分:0)

我不认为与您显示的方法类似的方法是Hystrix的固有方法,尽管可能可以通过了解 Hystrix 确定断路器是否断开的方式来创建。 / p>

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

摘录自电路是否断开?

  

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

     

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

     

如果电路闭合,则流程进入(5)以检查是否   有足够的容量来运行命令。

然后通过识别此行为,可以检测状态何时从“关闭”变为“打开”。

来自 this page 是Hystrix事件类型的简要列表。标记为一个的标记将在上面引用的步骤中有用:enter image description here

答案 1 :(得分:0)

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

您可以通过为指标流创建自己的订户来保留自己的未完成转换与已关闭转换的计数。您只需要跟踪电路的最后一个已知状态,然后从流中获取更新,就可以将最后一个已知状态与更新中的状态进行比较。如果它们不同,则表示已发生过渡,您将更新自己的计数器。

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

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