Hystrix 是 Netflix 针对微服务分布式系统采用的熔断保护中间件,相当于电路中的保险丝。
在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix 是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix 通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。
在微服务架构下,很多服务都相互依赖,如果不能对依赖的服务进行隔离,那么服务本身也有可能发生故障,Hystrix 通过 HystrixCommand 对调用进行隔离,这样可以阻止故障的连锁效应,能够让接口调用快速失败并迅速恢复正常,或者回退并优雅降级。
Hystrix 的简单使用
首先创建一个Spring Boot 模块,然后添加如下依赖:
创建成功后,添加如下配置,将Hystrix 注册到 Eureka 上:
spring.application.name=hystrix |
然后在项目启动类上添加如下注解,开启断路器,同时提供一个RestTemplate :
//@SpringBootApplication |
接下来提供Hystrix 接口:
|
|
启动Eureka 服务,启动两个provider实例(打两个包),启动一个consumer,访问consumer 去调用两个provider接口(负载均衡方式),访问成功之后然后突然关闭一个provider服务,再去刷新请求consumer,会有短时间的报错。(原因是一个provider掉线,它自己要把掉线的消息告诉Eureka,Eureka再把provider掉线的消息告诉consumer,在这个过程中肯定是有延迟的,在consumer没收到provider掉线的消息之前就有可能会去访问已经掉线的provider,这时就会有异常抛出。Hystrix在这里其实就是解决很短时间内的问题,consumer访问掉线的provider时不让弹出错误页面就行)