Feign使用Hystrix無效緣由及解決方法

最近項目重構使用了Spring Boot和Spring Cloud。這二者結合確實給項目帶來了方便,同時也遇到了一些問題。其中使用feign做爲服務消費,可是斷路器hystrix一直不起做用讓人很費解。最終通過重重查找終於找到緣由,以及解決方法。java

問題產生緣由

首先,使用spring-cloud搭建微服務的過程大部分是根據網上的教程來的,因爲網上教程的時間較早,而spring-cloud更新迭代較快,會形成依賴上的一些問題。教程中的spring-cloud的依賴是git

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Brixton.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

而我本身使用idea搭建項目使用的是較新的依賴github

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Dalston.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

發現二者的區別了嗎?對!就是依賴版本不一樣。教程中的版本是 Brixton.RELEASE 而我使用的版本是Dalston.RELEASE 。spring

探究過程

根據這個關係順藤摸瓜找到了Netflix的依賴版本ide

netflix依賴版本

接着,去了官網找到對應的版本,查看文檔和API微服務

mark

在文檔中會看到
文檔說明idea

這個意思就說feign默認是啓用hystrix的,若是要禁用的話須要加配置語句。可是種種跡象代表,feign中並無有啓用hystrix,看到這裏當時我就很疑惑,可是發現了hystrix在feign中的開關,仍是有所收穫的。我抱着試一試的心態照着上面的描述在配置文件中加上了配置,將false改成了true,結果神奇般的起了做用!spa

雖然問題解決了,爲何官方文檔仍是有錯誤的?在這裏吐槽一句:TMD(挺萌的)~~~。code

抱着追根求源的心態,查看了netflix的源碼,看看何時修改了默認配置。點擊上圖中的API就能夠看到源github上的源碼了。裏面這兩段代碼,就是管理默認配置的。教程

HystrixSecurityAutoConfiguration.java

FeignClientsConfiguration.java

爲何要默認關閉hystrix呢?請看這裏:https://github.com/spring-cloud/spring-cloud-netflix/issues/1277

至此,終於知道了產生錯誤的緣由,以及爲何要默認關閉hystrix。

解決方案

若是是yml文件,請在文件中加入:

feign:
  hystrix:
    enabled: true

若是是properties文件,請在文件中加入:

feign.hystrix.enabled=true

重啓服務,大功告成!

相關文章
相關標籤/搜索