内容简介:前阵子在我的知识星球中,有位朋友对我提了个问题,问我如何让Hystrix支持对接口级别的超时配置,今天给大家写篇文章,普及下Hystrix配置超时的几种方式。至于以后你是用阿里的Sentinel还是Netflix Hystrix我就不管了,但今天的主题还是Netflix Hystrix,至少目前还是有很多在使用的,所以今天这篇文章还是看看吧。
前阵子在我的知识星球中,有位朋友对我提了个问题,问我如何让Hystrix支持对接口级别的超时配置,今天给大家写篇文章,普及下Hystrix配置超时的几种方式。
至于以后你是用阿里的Sentinel还是Netflix Hystrix我就不管了,但今天的主题还是Netflix Hystrix,至少目前还是有很多在使用的,所以今天这篇文章还是看看吧。
@HystrixCommand
如果我们使用的是@HystrixCommand注解,那么可以在注解中直接指定超时时间,如下:
当然也可以指定commandKey,然后在配置文件中配置超时时间,如下:
配置文件给commandKey配置超时时间:
全局配置
如果只是想全局的配置,可以配置默认的超时时间:
接口级别配置
假如我们的Feign Client定义如下:
那么配置如下:
为什么要配置成上面的方式呢?
其实就是对commandKey进行配置,只要我们知道commandKey的生成规则就可以对接口级别进行配置,接口级别的规则是 Client名称#方法名(参数类型)
源码在feign.hystrix.SetterFactory.Default中:
服务级别配置
1.在Zuul中针对服务级别的话,直接配置service-id,如下:
Zuul中之所以要配置service-id原因是commandKey就是用的service-id, 通过源码分析可以得到结论。
首先进入的是RibbonRoutingFilter中的run方法,然后我们看核心的forward方法:
在forward中有下面的代码:
通过create可以定位到具体的实现,这边就看你用的什么Http客户端,默认有三种实现,默认定位到org.springframework.cloud.netflix.zuul.filters.route.apache.HttpClientRibbonCommandFactory.create(RibbonCommandContext)方法。
重点在new HttpClientRibbonCommand这行代码,第一个参数就是serviceId,我们看下HttpClientRibbonCommand构造函数的完整参数:
所以service-id就是commandKey。
2.在Feign中针对服务级别的话,需要对commandKey进行定制,可以用service-id, 也可以用Feign Client Name,如下:
-
.andCommandKey(HystrixCommandKey.Factory.asKey(commandKey)) 默认的接口方式
-
.andCommandKey(HystrixCommandKey.Factory.asKey(groupKey)) service-id方式
-
.andCommandKey(HystrixCommandKey.Factory.asKey(target.type().getSimpleName())); Feign Client Name方式
配置的话根据不同的配置填写不通的commandKey就可以了:
留一个问题大家思考下,欢迎留言讨论:
如果我们定制commandKey,也就意味着在使用Feign调用的时候,只能支持一种超时配置,要么默认的接口级别,要么自定义的服务级别。那么有没有什么方式能够让两种同时支持呢?
PS:技术交流加我微信 jihuan900,拉你进群!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- jsonp劫持入门玩法
- SkyWalking之高级玩法
- 【译】2019 JavaScript 新玩法
- PHP异步的的玩法
- Github 新玩法 -- Profile ReadMe
- Vue-loader 的巧妙玩法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Imperfect C++中文版
威尔逊 / 荣耀、刘未鹏 / 人民邮电出版社 / 2006-1 / 75.0
汇集实用的C++编程解决方案,C++虽然是一门非凡的语言,但并不完美。Matthew Wilson使用C++十年有余,其间发现C++存在一些固有的限制,需要一些颇具技术性的工作进行弥补。本书不仅指出了C++的缺失,更为你编写健壮、灵活、高效、可维护的代码提供了实用的技术和工具。Wilson向你展示了如何克服C++的复杂性,穿越C++庞大的范式阵列。夺回对代码的控制权,从而获得更理想的结果。一起来看看 《Imperfect C++中文版》 这本书的介绍吧!