@FeignClient
该注解用于通知 OpenFeign 组件对 @RequestMapping 注解下的接口进行解析,并通过动态代理的方式产生实现类,实现负载均衡和服务调用。
@EnableFeignClients
该注解用于开启 OpenFeign 功能,当 Spring Cloud 应用启动时,OpenFeign 会扫描标有 @FeignClient 注解的接口,生成代理并注册到 Spring 容器中。
简单的feign开发
在消费模块依赖引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
消费模块启动类加入@EnableFeignClients,开启OpenFeign功能
@SpringBootApplication
@EnableFeignClients
public class CommunityOrgStarterApplication {
public static void main(String[] args) {
SpringApplication.run(CommunityOrgStarterApplication.class,args);
}
消费模块新增feign接口模块
@Component
@FeignClient(value = "base-model")
public interface BaseApiService {
// 对应base-model的接口
@GetMapping("/baseUser/selectId")
BaseUser selectId(@RequestParam Map<String,Object> params);
}
消费模块新增接feign接口调用类
@RequestMapping("/baseUser")
@RestController
public class BaseUserController {
@Resource
private BaseApiService baseApiService;
@GetMapping("/selectId")
public BaseUser selectId(@RequestParam Map<String,Object> params) {
return baseApiService.selectId(params);
}
}
OpenFeign 超时控制(两种都可)
# 请求处理的超时时间
ReadTimeout: 10000
# 请求连接的超时时间 默认的时间为 1 秒
ConnectTimeout: 10000
feign:
client:
config:
base-model:
readTimeout: 10000
connectTimeout: 10000
OpenFeign 日志增强
OpenFeign 提供了日志打印功能,可以通过配置调整日志级别
- 加入配置
logging:
level:
#feign 日志以什么样的级别监控该接口
net.biancheng.c.service.DeptFeignService: debug
以上配置说明如下:
- net.biancheng.c.service.DeptFeignService 是开启 @FeignClient 注解的接口(即服务绑定接口)的完整类名。也可以只配置部分路径,表示监控该路径下的所有服务绑定接口
- 创建一个名为 ConfigBean 的配置类
@Configuration
public class ConfigBean {
/**
* OpenFeign 日志增强
* 配置 OpenFeign 记录哪些内容
*/
@Bean
Logger.Level feginLoggerLevel() {
return Logger.Level.FULL;
}
}
该配置的作用是通过配置的 Logger.Level 对象告诉 OpenFeign 记录哪些日志内容。
Logger.Level 的具体级别如下:
- NONE:不记录任何信息。
- BASIC:仅记录请求方法、URL 以及响应状态码和执行时间。
- HEADERS:除了记录 BASIC 级别的信息外,还会记录请求和响应的头信息。
- FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据等等。
feign对压缩的支持
feign:
client:
config:
base-model:
readTimeout: 10000
connectTimeout: 10000
compression:
request:
# 支持请求类型
mime-types: text/xml,application/xml,application/json
# 最小请求
min-request-size: 2048
# 启动请求压缩功能
enabled: true
response:
# 启动响应压缩功能
enabled: true