8.2 使用Feign服务降级
8.2.1 确定引入Feign服务降级依赖包
在调用微服务member项目中的pom.xml文件中确定是否引用Feign依赖包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
8.2.2 在bootstrap.yml配置文件中引入配置
在调用微服务member项目中的bootstrap.yml配置文件中引入配置
feign:
hystrix:
enabled: true
bootstrap.yml配置文件的内容为:
spring:
application:
name: member
cloud:
config:
discovery:
# 表示开启配置中心
enabled: true
service-id: config
profile: dev
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
feign:
hystrix:
enabled: true
8.2.3 在调用微服务客户端接口中设置静态内部类
在包com.marshal.springcloudsctsjymember.bookclient中的接口BookClient中添加内部静态类
@Component
static class BookClientFallBack implements BookClient{
@Override
public RestResult getInfo(Long bid){
RestResult restResult = new RestResult();
restResult.setCode("0");
restResult.setMessage("success");
restResult.setData(null);
return restResult;
}
@Override
public String create(Map rcc){
return null;
}
}
并添加上组件注解@Component。
在对接口上进行降级方法注解
@FeignClient(name="book", fallback = BookClient.BookClientFallBack.class)
接口BookClient的内容为:
package com.marshal.springcloudsctsjymember.bookclient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
// book是service-id
// @FeignClient(name="book") 指明这是Book微服务的调用客户端
@FeignClient(name="book", fallback = BookClient.BookClientFallBack.class)
public interface BookClient {
// 当调用getInfo方法的时候,自动向book微服务的/info发起请求
//@GetMapping("/info")
// 调用时自动会将?bid=XXX附加到url中
//public String getInfo(@RequestParam("bid") Long bid);
@GetMapping("/info")
public RestResult getInfo(@RequestParam("bid") Long bid);
@PostMapping("/create")
public String create(@RequestBody Map rcc);
@Component
static class BookClientFallBack implements BookClient{
@Override
public RestResult getInfo(Long bid){
RestResult restResult = new RestResult();
restResult.setCode("0");
restResult.setMessage("success");
restResult.setData(null);
return restResult;
}
@Override
public String create(Map rcc){
return null;
}
}
}
当后台接口的服务没有实现的时候,则会执行接口中的内部类的实现方法进行降级服务。