1. 程式人生 > >生產技巧:Feign如何控制Hystrix的啟停、超時、熔斷?

生產技巧:Feign如何控制Hystrix的啟停、超時、熔斷?

原文:http://www.itmuch.com/spring-cloud-sum/feign-hystrix/ ,轉載請說明出處。

這也是一篇寫於2017-08前後的工作日誌,當時由於專案比較多,很多團隊對Feign和Hystrix之間的小曖昧搞不清楚,所以寫了本篇文章,希望對大家的工作有所幫助。

  1. 要想全域性關閉Hystrix,只需使用如下配置即可:

    feign.hystrix.enabled: false
    

    這樣,就會為所有服務關閉掉Feign的Hystrix支援。也就是說:A服務呼叫B服務,如果在A服務上設定該屬性,A服務的所有Feign Client都不會再有Hystrix熔斷的能力了。

  2. 全域性配置夠靈活,一般不能滿足實際專案的要求。實際專案中,往往需要精確到指定服務的細粒度配置。例如:呼叫服務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支援。

  3. 很多場景下,關閉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中檢視。