SpringCloudAlibaba-OpenFeign的引入及使用
一、OpenFeign是什么
OpenFeign是SpringCloud对Fegin的封装升级,包含了SpringMVC,Ribbon等功能,可以使用SpringMVC的相关注解,通常我们在调用别的服务的接口的时候分别都是使用HttpClient或者RestTemplate等通过指定URL地址等操作去调用别的服务的接口。在微服务中,我们可以通过引入OpenFeign组件实现更方便的服务间的调用,最简单的就是可以通过指定其他服务的名字来调用相应接口。
二、引入依赖以及配置
首先我们在我们想要使用的服务下面引入依赖
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>在启动类上面加上启用OpenFeign的注解:
@EnableFeignClients
配置打印日志调用日志的配置类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23/**
* @Description
* OpenFeign配置类
* 如果加了@Configuration注解则为全局配置,所有Feign接口都有效
* 如果想要实现局部配置,则不需要配置@Configuration注解,在想要启用这个配置的Feign接口上面指定这个配置类
* @Author sy
* @Date 2023/3/5
* @Version 1.0
**/
public class FeignConfig {
/**
* @Description 日志级别
* @Author sy
* @Date 2023/3/5
* @Version 1.0
**/
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}配置yml配置文件
1
2
3
4logging:
level:
# 指定对应包的日志级别
com.sy.springcloud.service.openFeign: debug
三、实际使用
1 | /** |
到这里,最基本的配置使用可以了。后面还会增加更多使用的配置
四、契约模式
将OpenFeign的注解还原成原生注解,使用场景:例如我们的项目是一个早期版本的SpringCloud,当你想要对框架进行升级,那么由于早期的框架使用的是Feign组件,当你升级后要使用的是OpenFegin组件,就会出现兼容性的问题,那这里就可以使用这个契约模式去指定某些接口使用原生注解。这里可以通过多种配置方式来实现,我们这里就演示简单的两种分别是全局模式与局部模式:
全局模式:还是可以通过配置类来实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class FeignConfig {
/**
* @Description 日志级别
* @Author sy
* @Date 2023/3/5
* @Version 1.0
**/
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
/**
* @Description 契约模式,将OpenFeign注解还原成原生注解,基本不会使用到
* @Author sy
* @Date 2023/3/5
* @Version 1.0
**/
public Contract feignContract() {
return new Contract.Default();
}
}通过yml的方式来配置局部
1
2
3
4
5
6
7
8
9
10# feign局部配置
feign:
client:
config:
# 对应的服务名称
stock:
# 日志级别
logger-level: basic
# 契约模式,还原Feign原生注解
contract: feign.Contract.Default
五、超时时间
可以配置连接超时时间,与请求处理超时时间
通过配置类配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45/**
* @Description
* OpenFeign配置类
* 如果加了@Configuration注解则为全局配置,所有Feign接口都有效
* 如果想要实现局部配置,则不需要配置@Configuration注解,在想要启用这个配置的Feign接口上面指定这个配置类
* @Author sy
* @Date 2023/3/5
* @Version 1.0
**/
public class FeignConfig {
/**
* @Description 日志级别
* @Author sy
* @Date 2023/3/5
* @Version 1.0
**/
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
/**
* @Description 契约模式,将OpenFeign注解还原成原生注解,基本不会使用到
* @Author sy
* @Date 2023/3/5
* @Version 1.0
**/
public Contract feignContract() {
return new Contract.Default();
}
/**
* @Description 超时时间配置,第一个参数配置的是连接超时时间,第二个参数配置的是请求处理超时时间
* @Author sy
* @Date 2023/3/5
* @Version 1.0
**/
public Request.Options options() {
return new Request.Options(5000, 10000);
}
}通过yml配置文件配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14# feign局部配置
feign:
client:
config:
# 对应的服务实例名称
stock:
# 日志级别
logger-level: basic
# 契约模式,还原Feign原生注解
contract: feign.Contract.Default
# 连接超时时间配置
connect-timeout: 5000
# 请求处理超时时间配置
read-timeout: 10000