目录
[一. OpenFeign简介](#一. OpenFeign简介)
[二. OpenFeign原理](#二. OpenFeign原理)
一. OpenFeign简介
OpenFeign是SpringCloud服务调用中间件,可以帮助代理服务API接口。并且可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
二. OpenFeign原理
添加@EnableFeignClients注解开启对@FeignClient注解的扫描加载处理。根据Feign Client的开发规范,定义接口并添加@FeiginClient注解
当程序启动之后,会进行包扫描,扫描所有@FeignClient注解的接口,并将这些信息注入到IOC容器中。当定义的Feign接口被调用时,通过JDK的代理的方式生成具体的RequestTemplate。Feign会为每个接口方法创建一个RequestTemplate对象。该对象封装了HTTP请求需要的所有信息,例如请求参数名、请求方法等信息。
然后由RequestTemplate生成Request,把Request交给Client去处理,这里的Client可以是JDK原生的URLConnection、HttpClient或Okhttp。最后Client被封装到LoadBalanceClient类,看这个类的名字既可以知道是结合Ribbon负载均衡发起服务之间的调用,因为在OpenFeign中默认是已经整合了Ribbon了。
演示使用
创建一个简单springcloud项目,有两个模块consumer(消费者)和provider(生产者)模块
两个模块都需要注册进nacos注册中心,也可以使用其他的注册中心比如Apollo或者Eureka等,这里演示使用nacos
注册配置naocs具体步骤不再演示,可以查看博主之前文章进行注册配置
引入openFeign依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
provider模块
配置:
书写生产者测试接口:
消费者模块
配置:
启动两个模块查看是否注册进nacos中
消费者主启动类中添加远程调用注解
书写feign调用接口
控制层调用feign接口
测试:
配置全局feign日志
feign的调用日志需要单独进行配置,这样服务之间进行调用时才可以看到服务之间调用的日志信息
书写feign日志配置类
由于springboot默认日志级别是info, feign的debug日志级别就不会输出,所以还需要在配置中调整feign的debug级别打印
重启测试:
查看控制台可以看到服务调用接口的信息:
示例源代码:
密码:h6kp