上一篇我们在使用 Hystrix 的时候就有提到,Hystrix 的超时时间是 1 秒。但是有的时候 1 秒太短了,这里我们来说一下如何去配置 Hystrix 的超时时间。
一、全局配置超时时间
商品模块
yml
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000
这个是配置 hystrix 全局配置超时时间,这里配置的是 3000 毫秒,也就是 3 秒。
业务代码
业务代码我们只修改线程休眠时间,这里我们让线程休眠 3.1 秒
二、测试
可以看到,响应时间 6 秒,并且服务被熔断。
三、修改商品模块
我们将线程休眠 3.1 秒,改成 2秒,再来重新启动服务试试看。
可以看到,响应时间为 4.54 秒,再来看日志
同样是正常提供服务,最后看看数据库
完美~~~
四、单独配置超时响应时间
方式一
我们可以通过在 @HystrixCommand 增加一个配置
@HystrixCommand(
fallbackMethod = "getCommodityPriceFallback",
commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
}
)
通过 @HystrixProperty 设置 key、value 。key 是超时时间的字段,value 是具体的值。重新启动服务,再来试试。
可以看到,虽然全局配置的 3000 毫秒,但是这里是单独配置的,它会优先单独配置,在没有单独配置的时候才会去找全局配置。
方式二
上面的方法有一个问题,如果说我们现在有很多需要配置成 1 秒的方法,那么按照上面的方式去配置也不是很好的。
我们可以将配置抽离出来,通过 commandKey 引入到服务熔断中,再来看
yml
yml 中我们增加一段配置
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000
userGetKey:
execution:
isolation:
thread:
timeoutInMilliseconds: 1000
这样配置之后,相当于我们有了两种超时机制,一种是 default,一种是 userGetKey。
业务代码
我们在业务代码中使用 commandKey 进行引入 yml 中的配置。
自己重新启动服务,测试一下吧。
这一讲就讲到这里,有问题可以联系我:QQ 2100363119,欢迎大家访问我的个人网站:https://www.lemon1234.com
最近网站已经做好,并且已经上线,欢迎各位留言~~