Spring Cloud Netflix 参考文档(3)——断路器:Hystrix

3. 断路器:Hystrix

3.1 禁用 Spring Cloud 断路器 Hystrix

spring.cloud.circuitbreaker.hystrix.enabled 设置为 false 可以禁用断路器 Hystrix 的自动配置

3.2 配置 Hystrix 断路器

3.2.1 默认配置

为所有的断路器提供一个默认配置,您需要创建一个 Customizer bean 传递一个 HystrixCircuitBreakerFactory 或者 ReactiveHystrixCircuitBreakerFactory。 configureDefault 方法将提供一个默认配置。

@Bean public Customizer<HystrixCircuitBreakerFactory> defaultConfig() { return factory -> factory.configureDefault(id -> HystrixCommand.Setter .withGroupKey(HystrixCommandGroupKey.Factory.asKey(id)) .andCommandPropertiesDefaults(HystrixCommandProperties.Setter() .withExecutionTimeoutInMilliseconds(4000))); }

响应式例子

@Bean public Customizer<ReactiveHystrixCircuitBreakerFactory> customizer() { return factory -> factory.configure(builder -> builder.commandProperties( HystrixCommandProperties.Setter().withExecutionTimeoutInMilliseconds(2000)), "foo", "bar"); }

4. 断路器:Hystrix 客户端

Netflix 实现了一个断路器模式的库 Hystrix。在微服务架构中,有多层服务调用是正常的,如下所示:
image.png
图1. 微服务图片

低级别的服务故障可以导致直到用户级别的服务故障。当调用特定的服务超过circuitBreaker.requestVolumeThreshold(默认为20)并且在窗口期metrics.rollingStats.timeInMilliseconds(默认为10)调用失败的比例超过 circuitBreaker.errorThresholdPercent (默认为50%), 电路将断开且请求不会发送。在出现错误和开路的情况下,开发人员可以提供回调。
image.png
图2. Hystrix 回调防止级联故障

采用开路可以防止级联故障,并允许过载或故障服务有时间恢复。回调可以是另一个 Hystrix 受保护的调用、静态数据或合理的空值。可以对回调进行链接,以便第一个回调可以进行一些其他业务调用,这些业务调用将返回静态数据。(没太看懂)

4.1. 如何引入 Hystrix

在您的项目中引入 Hystrix, 需要包含以下依赖:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>

有关使用当前Spring Cloud发布系列设置构建系统的详细信息,请参照Spring Cloud Project

以下示例为一个使用 Hystrix 断路器的最简 Eureka Server:

@SpringBootApplication @EnableCircuitBreaker public class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); } } @Component public class StoreIntegration { @HystrixCommand(fallbackMethod = "defaultStores") public Object getStores(Map<String, Object> parameters) { //do stuff that might fail } public Object defaultStores(Map<String, Object> parameters) { return /* something useful */; } }

@HystrixCommand 注解由 Netflix 贡献的一个叫“javanica”的类库提供。Spring Cloud 自动将带有该注释的 Spring bean 包装在一个连接到 Hystrix 断路器的代理中。断路器决定何时打开和关闭回路,以及在出现故障的情况下做什么。

要配置 @HystrixCommand ,可以使用 commandProperties 属性和一列@HystrixProperty 注解。更多细节请看这里。有关可用属性的详细信息,请参阅 Hystrix wiki

4.2. 传递安全的上下文或使用 Spring Scopes

阅读(165)
评论(0)
updated@2021-06-17
评论区
目录