一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情
前言
-
上文介绍了hystrix的重要性。本文接着介绍他的另一功能
-
虽然
DefaultProperties可以避免每个接口都配置fallback。但是这种的全局好像还不是全局的fallback。我们还是需要每个类上配置fallback。笔者查阅了资料好像也没有 -
但是在openfeign专题里我们说了openfeign结合hystrix实现的服务降级功能。还记的里面提到了一个
FallbackFactory这个类吗。这个类可以理解成spring的BeanFactory。这个类是用来产生我们所需要的FallBack的。我们在这个工厂里可以生成一个通用类型的fallback的代理对象。代理对象可以根据代理方法的方法签名进行入参和出参。 -
这样我们可以在所有的openfeign地方配置这个工厂类。这样的话就避免的生成很多个fallback。 美中不足的还是需要每个地方都指定一下。关于
FallBackFactory感兴趣的可以下载源码查看或者进主页查看openfeign专题。
熔断
-
首先我们通过circuitBreaker.enabled=true开启熔断器
-
circuitBreaker.requestVolumeThreshold设置统计请求次数 -
circuitBreaker.sleepWindowInMilliseconds设置时间滑动单位 , 在触发熔断后多久进行尝试开放,及俗称的半开状态 -
circuitBreaker.errorThresholdPercentage设置触发熔断开关的临界条件 -
上面的配置如果最近的10次请求错误率达到60% ,则触发熔断降级 , 在10S内都处于熔断状态服务进行降级。10S后半开尝试获取服务最新状态
-
下面我们通过jmeter进行接口
http://localhost/order/get?id=-1进行20次测试。虽然这20次无一例额外都会报错。但是我们会发现一开始报错是因为我们代码里的错误。后面的错误就是hystrix熔断的错误了。一开始试by zero 错误、后面就是short-circuited and fallback failed 熔断错误了 -
正常我们在hystrix中会配置fallback , 关于fallback两种方式我们上面降级章节已经实现了。这里是为了方便看到错误的不同特意放开了。
-
在HystrixCommand中配置的参数基本都是在HystrixPropertiesManager对象中。我们可以看到关于熔断器的配置有6个参数。基本就是我们上面的四个配置
-
实现的配置也很简单,只需要简单配置下就可以了
commandProperties = {
@HystrixProperty(name = "circuitBreaker.enabled",value = "true"), //是否开启断路器
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"), //请求次数
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"), //时间范围
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"), //失败率达到多少后跳闸
},
fallbackMethod = "getInfoFallback"