生產技巧:Feign如何控制Hystrix的啟停、超時、熔斷?
阿新 • • 發佈:2018-12-03
原文:http://www.itmuch.com/spring-cloud-sum/feign-hystrix/ ,轉載請說明出處。
這也是一篇寫於2017-08前後的工作日誌,當時由於專案比較多,很多團隊對Feign和Hystrix之間的小曖昧搞不清楚,所以寫了本篇文章,希望對大家的工作有所幫助。
-
要想全域性關閉Hystrix,只需使用如下配置即可:
feign.hystrix.enabled: false
這樣,就會為所有服務關閉掉Feign的Hystrix支援。也就是說:A服務呼叫B服務,如果在A服務上設定該屬性,A服務的所有Feign Client都不會再有Hystrix熔斷的能力了。
-
全域性配置夠靈活,一般不能滿足實際專案的要求。實際專案中,往往需要精確到指定服務的細粒度配置。例如:呼叫服務a時關閉Hystrix,呼叫b服務時開啟Hystrix。可如下配置:
@FeignClient(name="a", configuration = FooConfiguration.class)
那麼,這個FooConfiguration只需要編寫如下即可:
public class FooConfiguration { @Bean @Scope("prototype") public Feign.Builder feignBuilder() { return Feign.builder(); } }
這樣,對於
name = "a"
的Feign Client都會關閉Hystrix支援。 -
很多場景下,關閉Hystrix相對暴力,特別是上文編寫程式碼的方式。很多時候,我們可能更希望只是關閉熔斷,抑或是關閉超時保護。此時要怎麼搞呢?
關閉熔斷:
# 全域性關閉熔斷: hystrix.command.default.circuitBreaker.enabled: false # 區域性關閉熔斷: hystrix.command.<HystrixCommandKey>.circuitBreaker.enabled: false
設定超時:
# 全域性設定超時: hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 1000 # 區域性設定超時: hystrix.command.<HystrixCommandKey>.execution.isolation.thread.timeoutInMilliseconds: 1000
關閉超時:
# 全域性關閉: hystrix.command.default.execution.timeout.enabled: false # 區域性關閉: hystrix.command.<HystrixCommandKey>.execution.timeout.enabled: false
其中的
<HystrixCommandKey>
,是個變數,可以開啟服務的hystrix.stream
端點即可看到,也可在Hystrix Dashboard中檢視。