上一篇讲了Ribbon集成Hystrix基本使用,本篇再说一下Feign是如何集成Hystrix,完成回退的。
先把Eureka集群和服务提供者(x-demo-service)集群启动。
x-demo-service依然不用改任何东西,下面开始对x-demo-service-feign进行改造。
1、build.gradle配置文件加入Hystrix依赖
1 dependencies { 2 compile project(":x-demo-service-api") 3 4 compile("org.springframework.cloud:spring-cloud-starter-netflix-eureka-client") 5 compile("org.springframework.cloud:spring-cloud-starter-openfeign") 6 compile("org.springframework.cloud:spring-cloud-starter-netflix-hystrix") 7 }
2、新建回退类,该类必须集成我们之前写的FeignClientDemoService接口
1 package com.x.demo.feign.fallback; 2 3 import com.x.demo.feign.service.FeignClientDemoService; 4 import org.springframework.stereotype.Component; 5 6 /** 7 * @author Leo 8 */ 9 @Component 10 public class FeignClientDemoServiceFallback implements FeignClientDemoService { 11 @Override 12 public String service() { 13 return "我是Feign,服务端大概率挂了!"; 14 } 15 }
3、FeignClientDemoService接口修改
修改FeignClient注解配置,将fallback指向我们新建的回退类FeignClientDemoServiceFallback
1 package com.x.demo.feign.service; 2 3 import com.x.demo.feign.fallback.FeignClientDemoServiceFallback; 4 import org.springframework.cloud.openfeign.FeignClient; 5 import org.springframework.web.bind.annotation.RequestMapping; 6 import org.springframework.web.bind.annotation.RequestMethod; 7 8 /** 9 * @author Leo 10 */ 11 @FeignClient(value = "x-demo-service", fallback = FeignClientDemoServiceFallback.class) 12 public interface FeignClientDemoService { 13 14 @RequestMapping(value = "demo/service", method = RequestMethod.GET) 15 String service(); 16 }
4、启动服务
启动类不用改任何东西
1 /** 2 * @author Leo 3 */ 4 @SpringBootApplication 5 @EnableEurekaClient 6 @EnableFeignClients 7 public class FeignServerApplication { 8 9 public static void main(String[] args) { 10 SpringApplication.run(FeignServerApplication.class, args); 11 } 12 }
5、测试
浏览器输入:http://localhost:8092/feign/service,多次刷新接口,返回:
x-demo-service hello.8081
x-demo-service hello.8082
x-demo-service hello.8083
将服务提供者x-demo-service Kill之后,刷新http://localhost:8092/feign/service,返回:
我们看到接口返回了一个Whitelabel Error Page页面,并没有返回我们在回退类中输出的“我是Feign,服务端大概率挂了!”,这肯定不是我们想要的结果
原因是我们还需要改一下配置文件,需要开启hystrix功能,将feign.hystrix.enabled设置为true。
1 spring: 2 application: 3 name: x-demo-service-feign 4 5 server: 6 port: 8092 7 8 eureka: 9 client: 10 serviceUrl: 11 defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/ 12 13 feign: 14 hystrix: 15 enabled: true
重启服务,刷新http://localhost:8092/feign/service,返回:
至此,Feign基础hystrix完成。