1.OpenFeign简介
Feign是一个声明式的Web服务客户端(Web服务客户端就是Http客户端),让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可。
cloud官网介绍Feign:Spring Cloud OpenFeign
OpenFeign源码:https://github.com/OpenFeign/feign
2.OpenFeign能干什么
Java当中常见的Http客户端有很多,除了Feign,类似的还有Apache 的 HttpClient
以及OKHttp3
,还有SpringBoot自带的RestTemplate
这些都是Java当中常用的HTTP 请求工具。
什么是Http客户端?
当我们自己的后端项目中 需要 调用别的项目的接口的时候,就需要通过Http客户端来调用。在实际开发当中经常会遇到这种场景,比如微服务之间调用,除了微服务之外,可能有时候会涉及到对接一些第三方接口也需要使用到 Http客户端 来调用 第三方接口。
所有的客户端相比较,Feign更加简单一点,在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定。
一句话:OpenFeign可以提供声明式定义服务接口供调用
3.maven依赖
<dependency> <groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
4.配置文件
spring:application:openfeign:client:config:default:## default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间connect-timeout: 20000 read-timeout: 20000httpclient:#openfeign默认的httpclient不支持连接池,性能效率较低,官方推荐使用Apache HttpClient5hc5:enabled: true#设置openfeign的请求响应压缩compression:request:enabled: true#支持压缩的数据类型mime-types: text/xml,application/xml,application/json min-request-size: 2048response:enabled: true
#设置feign日志 logging.level+@FeignClient完整接口名+debug
logging:level:com:sunxiao:cloud:apis:PayFeignApi: debug
5.启动和配置类
启动类要开启openfeign:@EnableFeignClients。 配置类:
@Configuration
public class FeignConfig {// 重试机制@Beanpublic Retryer myRetryer() {return new Retryer.Default();// 初次间隔 最大间隔 最大请求次数(1+2) = 3
// return new Retryer.Default(100, 1, 3);}// 日志记录级别@Beanpublic Logger.Level feignLoggerLevel() {return Logger.Level.FULL;}
}
6.接口
@FeignClient(value = "servicename")
public interface PayFeignApi {@PostMapping("/Users")Result<Integer> addUser(@RequestBody UserDTO user);
}
7.客户端调用
@RestController
@RequestMapping("/feign")
public class OrderController {//注入接口对象@Resourceprivate PayFeignApi payFeignApi;@PostMapping("/users")public Result<Integer> test(@RequestBody UserDTO userDTO) {return payFeignApi.addUser(userDTO);}
}