Hystrix:定制断路器和恢复逻辑

时间:2014-11-21 16:32:41

标签: java fault-tolerance hystrix

我刚刚阅读了Hystrix指南,并试图了解默认断路器和恢复期如何运作,以及如何自定义其行为。

显然,如果电路被触发,Hystrix将自动调用命令的getFallBack()方法;我明白这一点。但是,首先使电路跳闸的标准是什么?理想情况下,在我们考虑服务离线/不健康并使断路器跳闸之前,我想尝试多次尝试支持服务(例如,最多3次尝试)。 我如何实现这一点,以及在哪里?

但我想如果我覆盖默认的断路器,我还必须覆盖处理默认恢复期的任何机制。如果支持服务出现故障,可能是出于以下几种原因之一:

  • 客户端和服务器之间存在网络中断
  • 该服务部署了一个错误,使其无法返回对客户端的有效响应
  • 客户端部署了一个错误,使其无法向服务器发送有效请求
  • 一些奇怪的,短暂的服务打嗝(也许服务正在进行重大的垃圾收集等)。

在大多数情况下,仅仅等待 N 秒然后再次尝试的恢复期是不够的。如果服务中有错误,或者有人在数据中心拉了一些网线,我们将始终从此服务中获取失败。只有少数情况下,客户服务才能在没有任何人为干预的情况下自动治愈自己。

所以我猜我的下一个问题是部分" 如何自定义默认的恢复期策略?",但我猜它主要是:" 如何在服务中断时使用Hystrix通知devops并需要手动干预?"

1 个答案:

答案 0 :(得分:30)

Hystrix调用回退方法基本上有四个原因:异常,超时,太多并行请求或先前调用中的过多异常。

如果返回代码或从服务收到的异常表明重试有意义,您可能希望在run()方法中重试。

在命令的回退方法中,您可能会在超时时重试 - 当有太多并行请求或太多异常时,再次调用同一服务通常没有意义。

还要求如何通知devops :您应该将监控系统连接到Hystrix,以轮询断路器的状态以及成功和不成功呼叫的比率。您可以使用提供的metrics publishers,JMX,或使用Hystrix'编写自己的适配器。 API。我在tutorial I prepared中为Riemann和Zabbix编写了两个适配器;你为此提供了很少的代码。

本教程还有一个示例应用程序和一个加载驱动程序来尝试一些场景。

BR, 亚历山大。