Hystrix主要功能介绍:
降级:通过设置的fallback来实现,如果达到降级条件,则会调用fallback方法来返回降级后的内容
熔断:hystrix可以通过设置熔断开关进行强制打开熔断或关闭熔断,也可设置相关参数,在运行时由hystrix进行统计时间窗口内的服务错误情况自主进行“跳闸”处理
隔离模式:
线程隔离:默认
信号量隔离:可通过如下方法进行设置 HystrixCommandProperties.Setter().withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE))
Hystrix的使用:
Hystrix主要通过HystrixCommand来把依赖调用封装进run方法,通过执行command的execute()/queue做同步或异步调用。 当触发降级逻辑时,会调用command中的 fallback方法,触发的条件一般为如下4种:
(1):run()方法抛出非HystrixBadRequestException异常。( HystrixBadRequestException异常需要单独处理)。
(2):run()方法调用超时
(3):熔断器开启拦截调用
(4):线程池/队列/信号量是否跑满
在使用hystrix之前,首先要引入POM
<!-- hystrix -->
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-core</artifactId>
<version>1.4.22</version>
</dependency>
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-metrics-event-stream</artifactId>
<version>1.4.22</version>
</dependency>
有多种方式使用Hystrix,分别如下:
1)注解方式,在方法上添加@HystrixCommand进行配置,具体参考微博 : https://blog.youkuaiyun.com/xiaomin1991222/article/details/84817401
2)命令模式封装依赖逻辑。写一个自定义的command 继承 HystrixCommand 即可,具体示例可以参考微博:https://blog.youkuaiyun.com/zjcsuct/article/details/78198632 里面介绍的比较全面
3)如果原来项目中各逻辑服务都已完成,不想全量添加注解或创建大量自定义command类,则可以采用spring切面来完成对逻辑方法(service)的熔断处理,但也会有一个弊端 -- 受制于spring切面的局限,无法对同一个service内的方法调用执行拦截。
如下为第3种方式