配置Feignorg.springframework.cloud spring-cloud-starter-openfeignorg.springframework.cloud spring-cloud-starter-loadbalancer
# 配置Feign
feign:
client:
config:
# 服务提供者的服务名
nacos-school-server:
# 设置日志级别
loggerLevel: FULL
# 设置契约配置:支持Feign原生注解
# contract: feign.Contract.Default
# 设置请求超时时间,超时会抛出异常,单位毫秒,默认值2s
# readTimeout: 5000
# 设置连接超时时间,超时会抛出异常,单位毫秒,默认值5s
# connectTimeout: 10000
# 配置自定义请求拦截器
requestInterceptors:
- com.tigerkin.feign.CustomRequestIntercoptor
添加Feign接口
@Component
@FeignClient(value = "nacos-school-server", path = "/school", fallback = SchoolServiceFallback.class)
public interface SchoolServiceFeign {
// Feign原生注解:@RequestLine("GET /get") 请求映射注解,不指定GET POST等请求方法就会抛出异常
// Feign原生注解:@Param() 参数注解
@GetMapping("/get")
String get();
}
添加Feign回调
Feign回调需要整合Ribbon或者Sentinel熔断降级,否则就不会生效。由于Ribbon已经不维护,这里就整合Sentinel。
添加依赖
com.alibaba.cloud spring-cloud-starter-alibaba-sentinel
添加配置
feign:
# 集成Sentinel后,需要设置为true
sentinel:
enabled: true
整合后回调就可以生效了
@Component
public class SchoolServiceFallback implements SchoolServiceFeign {
@Override
public String get() {
return "获取学校请求调用失败";
}
}
服务调用
服务调用就比较简单了,就跟调用方法一样。依赖注入Feign接口,然后就只调用方法即可。
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
SchoolServiceFeign schoolServiceFeign;
@GetMapping("/getSchool")
public String getSchool() {
return String.format("[Feign] %s", schoolServiceFeign.get());
}
}



