在复杂的分布式系统中,可能有几十个服务相互依赖,这些服务由于某些原因,例如机房的不可靠性、网络服务商的不可靠性等,导致某个服务不可用 。 如果系统不隔离该不可用的服务,可能会导致整个系统不可用。Hystrix 提供了熔断器功能,能够阻止分布式系统中出现联动故障。Hystrix 是通过隔离服务的访问点阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性。
使用 Hystrix
在 Ribbon 使用 Hystrix
添加依赖包
1 | <dependency> |
修改启动类
1 | @EnableHystrix // 启用 Hystrix 熔断器 |
修改 Service
1 | @Service |
测试
- 启动 eureka-server
- 启动 eureka-ribbon-client
访问 http://localhost:8021/hi?name=victor 可以看到返回的是 hiError 方法执行的结果
在 Feign 使用 Hystrix
application.yml 添加
1 | feign: |
添加熔断处理类
1 | @Component |
修改 FeignClient
1 | @FeignClient(value = "eureka-client", configuration = FeignConfig.class |
测试
- 启动 eureka-server
- 启动 eureka-feign-client
访问 http://localhost:8031/hi?name=victor 可以看到返回的是 hiError 方法执行的结果
使用 Hystrix Dashboard 监控熔断器状态
在 Ribbon 使用 Hystrix Dashboard
添加依赖包
1 | <dependency> |
修改启动类
1 | @EnableHystrix // 启用 Hystrix 熔断器 |
application.yml 添加
1 | management: |
测试
- 启动 eureka-server
- 启动 eureka-ribbon-client
先访问 http://localhost:8021/hi?name=victor,然后访问 http://localhost:8021/actuator/hystrix.stream 浏览器上会显示熔断器的数据指标
访问 http://localhost:8021/hystrix,然后在界面输入 http://localhost:8021/actuator/hystrix.stream 点击 [Monitor Stream] 按钮可以看到熔断器的各种数据指标
在 Feign 使用 Hystrix Dashboard
添加依赖包
1 | <dependency> |
与 Ribbon 相比需要添加 spring-cloud-starter-netflix-hystrix 依赖
修改启动类
1 | @EnableFeignClients // 开启 Feign Client |
与 Ribbon 相比需要添加 @EnableCircuitBreaker 注解
application.yml 添加
1 | management: |
测试
- 启动 eureka-server
- 启动 eureka-feign-client
先访问 http://localhost:8031/hi?name=victor,然后访问 http://localhost:8031/actuator/hystrix.stream 浏览器上会显示熔断器的数据指标
访问 http://localhost:8031/hystrix,然后在界面输入 http://localhost:8031/actuator/hystrix.stream 点击 [Monitor Stream] 按钮可以看到熔断器的各种数据指标
使用 Turbine 聚合监控
新建 spring-cloud-eureka-turbine-client Module
pom
1 | <parent> |
application.yml
1 | server: |
启动类
1 | @SpringBootApplication |
测试
- 启动 eureka-server
- 启动 eureka-ribbon-client
- 启动 eureka-feign-client
- 启动 eureka-turbine-client
- 访问 http://localhost:8021/hi?name=victor
- 访问 http://localhost:8031/hi?name=victor
访问 http://localhost:8021/hystrix 或 http://localhost:8031/hystrix 然后在界面输入 http://localhost:8041/turbine.stream 点击 [Monitor Stream] 按钮可以看到 eureka-ribbon-client 和 eureka-feign-client 熔断器的各种数据指标
完整代码:GitHub
本人 C# 转 Java 的 newbie, 如有错误或不足欢迎指正,谢谢