最近项目重构使用了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
接着,去了官网找到对应的版本,查看文档和API微服务
在文档中会看到
idea
这个意思就说feign默认是启用hystrix的,若是要禁用的话须要加配置语句。可是种种迹象代表,feign中并无有启用hystrix,看到这里当时我就很疑惑,可是发现了hystrix在feign中的开关,仍是有所收获的。我抱着试一试的心态照着上面的描述在配置文件中加上了配置,将false
改成了true
,结果神奇般的起了做用!spa
虽然问题解决了,为何官方文档仍是有错误的?在这里吐槽一句:TMD(挺萌的)~~~。code
抱着追根求源的心态,查看了netflix的源码,看看何时修改了默认配置。点击上图中的API就能够看到源github上的源码了。里面这两段代码,就是管理默认配置的。教程
为何要默认关闭hystrix呢?请看这里:https://github.com/spring-cloud/spring-cloud-netflix/issues/1277
至此,终于知道了产生错误的缘由,以及为何要默认关闭hystrix。
若是是yml文件,请在文件中加入:
feign: hystrix: enabled: true
若是是properties文件,请在文件中加入:
feign.hystrix.enabled=true
重启服务,大功告成!