添加Maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
配置Feign
# 配置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接口
/**
* @ClassName SchoolServiceFeign
* @Description
* value: 服务器提供者的应用程序名
* path: 可以配置统一前缀路径
* fallback: 异常回调
* @Author tigerkin
* @Date 2022/3/3 14:14
*/
@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。
- 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- 添加配置
feign:
# 集成Sentinel后,需要设置为true
sentinel:
enabled: true
- 整合后回调就可以生效了
/**
* @ClassName SchoolServiceFallback
* @Description 异常回调需要实现Feign接口
* @Author tigerkin
* @Date 2022/3/3 14:15
*/
@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());
}
}