15.2.2 管理断路器阈值

默认情况下,如果断路器保护的方法被调用超过 20 次,如果超过 50% 的调用在 10 秒钟内失败,那么断路器将进入断开状态。所有后续调用都将由降级方法处理。经过 5 秒后,断路器进入半开状态,原方法将被再次尝试。

您可以通过设置 Hystrix 命令属性来调整失败和重试阈值。以下命令属性会影响断路器:

  • circuitBreaker.requestVolumeThreshold——在给定的时间段内,方法应该被调用的次数。
  • circuitBreaker.errorThresholdPercentage——给定时间段内,失败方法所占的百分比。
  • metrics.rollingStats.timeInMilliseconds——考虑请求量和错误百分比的滚动时间段。
  • circuitBreaker.sleepWindowInMilliseconds——断开状态持续多长时间进入半打开状态,以再次尝试调用原始失败方法。

metrics.rollingState.timeInMilliseconds 中指定的时间段内,如果 circuitBreaker.requestVolumeThresholdcircuitBreaker.errorThresholdPercentage 同时超过阈值,则断路器进入断开状态。在 circuitBreaker.sleepWindowInMilliseconds 指定的时间内保持断开状态。之后将变为半开状态,并再一次尝试最初的失败方法。

例如,假设要调整失败设置,方法的调用次数必须超过 30 次,并且在 20 秒内有超过 25% 的请求失败才触发。需要设置以下 Hystrix 命令属性:

  1. @HystrixCommand(
  2. fallbackMethod="getDefaultIngredients",
  3. commandProperties={
  4. @HystrixProperty(
  5. name="circuitBreaker.requestVolumeThreshold",
  6. value="30"),
  7. @HystrixProperty(
  8. name="circuitBreaker.errorThresholdPercentage",
  9. value="25"),
  10. @HystrixProperty(
  11. name="metrics.rollingStats.timeInMilliseconds",
  12. value="20000")
  13. })
  14. public List<Ingredient> getAllIngredients() {
  15. // ...
  16. }

此外,如果您决定一旦断开,断路器必须保持断开状态最多 1 分钟,然后转为半开状态,您可以这样设置 circuitBreaker.sleepWindowInMilliseconds 命令属性:

  1. @HystrixCommand(
  2. fallbackMethod="getDefaultIngredients",
  3. commandProperties={
  4. ...
  5. @HystrixProperty(
  6. name="circuitBreaker.sleepWindowInMilliseconds",
  7. value="60000")
  8. })

除了优雅地处理方法失败和延迟之外,Hystrix 还发布了应用程序中每个断路器的度量流。下一步,让我们看一看如何通过 Hystrix 流,来监控使用 Hystrix 的应用程序的健康状况。