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接口