为什么使用服务降级就不再多做阐述,在之前的文章讲Spring Cloud Ribbon中有提到过,本节只来实现一下怎么使用 Feign来到达服务降级的目的,本节列子使用上一节创建的项目fegin-consumer来进行改造,实现服务降级。
Feign实现服务降级只需要为Feign客户端的定义接口编写一个具体的接口实现类,在上一节中在fegin-consumer工程中创建了一个FeignService定义接口类,我们只需要为FeignService接口实现一个服务降级类FeignServiceFallback,其中每个重写的方法的实现逻辑都可以用来定义响应的服务降级逻辑。
- 为FeignService创建服务降级类FeignServiceFallback
@Component
public class FeignServiceFallback implements FeignService {
@Override
public String hello() {
return "/feign/test:远程调用失败了";
}
@Override
public String testRequest(String name) {
return "/feign/testRequest:远程调用失败了";
}
@Override
public String testHeader(String name) {
return "/feign/testHeader:远程调用失败了";
}
@Override
public String testRequestBody(User user) {
return "/feign/testRequestBody:远程调用失败了";
}
}
- 修改FeignService类,使用
@FeignClient
注解的fallback
属性来指定对应的服务降级实现类。
@FeignClient(name = "hello-client", fallback = FeignServiceFallback.class)
public interface FeignService {
@RequestMapping(value = "/feign/test")
String hello();
@RequestMapping(value = "/feign/testRequest")
String testRequest(@RequestParam(value = "name") String name);
@RequestMapping(value = "/feign/testHeader")
String testHeader(@RequestHeader(value = "name") String name);
@RequestMapping(value = "/feign/testRequestBody")
String testRequestBody(@RequestBody User user);
}
- 修改application.yml,添加
feign.hystrix.enabled=true
开启Feign客户端的Hystirx支持,默认是false,如果不开启,将
测试
启动服务注册中心和fegin-consumer服务,但是服务提供者实例不去启动,这样当远程调用时,可以看一下是否进行了服务降级。
访问:http://localhost:9000/feign/test2
![](https://img.haomeiwen.com/i10516977/fab72336c9052c63.png)
从控制台打印的结果中可以看到,因为服务提供者没有启动,远程调用失败,执行了服务降级逻辑。
网友评论