OpenFeign详解
OpenFeign概述
Feign
Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端。
Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。
Feign旨在使编写Java Http客户端变得更容易。
Feign是一个声明式WebService客户端,使用Feign能让编写Web Service客户端更加简单。
Feign也支持可拔插式的编码器和解码器。
它的使用方法是定义一个服务接口然后在上面添加注解。
OpenFeign
OpenFeign是Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。
OpenFeign的@Feignclient可以解析SpringMVc的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
搭建项目
在父项目中,创建子项目cloud-openFeign【前提搭建eureka单机版】
修改pom.xml
<dependencies>
<!-- OpenFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- actuator -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- SpringMVC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
</dependencies>
修改application.yml
server:
port: 80
spring:
application:
name: cloud-openFeign
eureka:
client:
service-url:
# Eureka server 地址
defaultZone: http://localhost:7001/eureka/
启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients//开启openFeign的接口扫描
public class OpenFeign8001 {
public static void main(String[] args) {
SpringApplication.run(OpenFeign8001.class,args);
}
}
调用服务
其余项目创建接口
@RestController
@RequestMapping("/eureka/pro")
public class testController {
@GetMapping("/test")
public String test(){
return "test";
}
}
服务层【调用其余应用】
@Component
@FeignClient(value = "CLOUD-EUREKA-PRO")//调用其余应用【value是应用名】
public interface TestService {
@GetMapping("/eureka/pro/test")
String test();
}
控制层
@RestController
@RequestMapping("/openFeign")
public class TestController {
@Autowired
private TestService testService;
@GetMapping("/test")
public String test(){
return testService.test();
}
}
测试
localhost:8001/openFeign/test
openFeign超时机制
openFeign超时机制
服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去
在某个峰值时刻,大呈的请求都在同时请求服务消费者,会造成线程的大呈堆积,势必会造成雪崩
利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问则自动断开连接
修改application.yml
#配置openFeign超时时间
feign:
client:
config:
default:
#连接超时时间 2s
connectTimeout: 2000
#读取数据超时时间 2s
readTimeout: 2000
OpenFeign日志增强
OpenFeign日志增强
OpenFeign提供了日志增强功能,但是默认不显示任何日志,开发者可以自己配置日志的级别
OpenFeign的日志级别
NONE:默认的,不显示任何日志;
BASIC:仅记录请求方法、URL、响应状态码及执行时间;
HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
配置类-配置日志级别
import feign.Logger;
@Configuration
public class OpenFeignConfig{
/**
* 日志级别定义:FULL(除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。)
*/
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
application.yml-设置开启日志的接口
logging:
level:
org.example.service: debug
这里的org.example.service是openFeign接口所在的包名,当然你也可以配置一个特定的openFeign接口