一、此文章是在第五篇基础上进行的改动: 1.1 项目添加pom依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>二、配置文件信息-Feign的信息
#以下是FeignClient的Hystrix熔断功能必须要依赖于feign开启超时时间设置 #feign.client.config.default.read-timeout=5000 时间必须大于hystrix熔断的时间;要不然feign的超时时间就会生效导致熔断 #开启Feign熔断支持 feign.hystrix.enabled=true #设置hystrix熔断器检测时间(默认1秒) hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000 #feign调用接口处理响应时间 feign.client.config.default.read-timeout=5000 #feign建立请求连接时间 feign.client.config.default.connect-timeout=20002.1 Feign和Hystrix代码
@FeignClient(value = "PROVIDER-SERVER",configuration = FeignConfiguration.class, fallbackFactory = TestFeignFallback.class) public interface TestFeign { @GetMapping(value = "/getTest") String getTest(); } @Component public class TestFeignFallback implements FallbackFactory<TestFeign> { @Override public TestFeign create(Throwable throwable) { return new TestFeign() { @Override public String getTest() { return "调用失败-服务降级"; } }; } }三、项目整体结构:
四、启动 8900注册中心、8901提供者、8902消费者服务
五、浏览器访问测试 http://localhost:8902/getTest
#设置hystrix熔断器检测时间(默认1秒) hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000结论:浏览器和控制台都显示返回成功,消耗时间是75ms 而我们配置的熔断时间是3000ms 结论:请求成功,没有触发熔断机制。
5.1 测试(请求超时)触发熔断机制Hystrix;给8901服务提供者接口打上Debug模式,让服务处于等待超过3000ms来触发熔断机制
#设置hystrix熔断器检测时间(默认1秒) hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000结论:浏览器和控制台都返回了-调用失败-服务降级;此时的请求是3103ms 显然是大于了我们所配置的熔断时间3000ms 因此我们配置的熔断机制生效-(请求超时)触发熔断机制-测试验证成功。
5.2 测试feign调用接口处理响应时间生效机制
#feign调用接口处理响应时间 feign.client.config.default.read-timeout=5000浏览器访问:http://localhost:8902/getTest 结论:根据控制台打印的信息,此请求时间耗时5013ms 显然大于我们想项目配置文件配置的5000ms 此时Feign的调用接口处理响应时间机制已生效,直接触发熔断机制-测试验证成功。
5.3 至此:Feign+Hystrix使用Feign自带的Hystrix机制进行服务熔断降级-验证成功。