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 {@Autowiredprivate TestService testService;@GetMapping("/test")public String test(){return testService.test();}
}
测试
localhost:8001/openFeign/test
openFeign超时机制
openFeign超时机制
服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去
在某个峰值时刻,大呈的请求都在同时请求服务消费者,会造成线程的大呈堆积,势必会造成雪崩
利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问则自动断开连接
修改application.yml
#配置openFeign超时时间
feign:client:config:default:#连接超时时间 2sconnectTimeout: 2000#读取数据超时时间 2sreadTimeout: 2000
OpenFeign日志增强
OpenFeign日志增强
OpenFeign提供了日志增强功能,但是默认不显示任何日志,开发者可以自己配置日志的级别
OpenFeign的日志级别
NONE:默认的,不显示任何日志;
BASIC:仅记录请求方法、URL、响应状态码及执行时间;
HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
配置类-配置日志级别
import feign.Logger;@Configuration
public class OpenFeignConfig{/*** 日志级别定义:FULL(除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。)*/@BeanLogger.Level feignLoggerLevel(){return Logger.Level.FULL;}
}
application.yml-设置开启日志的接口
logging:level:org.example.service: debug
这里的org.example.service是openFeign接口所在的包名,当然你也可以配置一个特定的openFeign接口