目录
为什么要Feign?
知道一门技术存在的原因 是很重要的一件事
首先, 不同的微服务模块之间是需要数据交互和调用,为了完成某些业务逻辑,不同的微服务之间需要http通信来交互.http的选型不必多言.
Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。
Spring Cloud Feign具备可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring MVC的注解。
可以将feign的具体类:xxxclient类比为controller层,都是用于数据交互,client的代码结构也很像
定义和基本使用
引入依赖
在启动类添加注解,开启Feign
编写feign的客户端
一个http请求至少应该包含的是以下五个要素,feign在接口里体现了出来
调用该连接:直接调用即可,无感知的,使得代码可读性很好,没有和http相关的代码
自定义Feign配置
一般我们就是配置日志级别
更改的方式
Feign性能优化
主要包含以下两种手段:
1.使用连接池代替默认的URLConnection
2.日志级别使用Basic/none
以下为修改连接池的方式
Feign最佳实践
由于在实际开发中各个Feign Client接口的代码实现十分类似
同时不同的模块都会需要用到feign的相关接口,重复的代码比较多,因此可以考虑提取出feign作为单独的一个模块,把公共的代码提取出来方便所有消费者使用
首先,你需要创建一个独立的Feign客户端模块。在这个模块中,你需要添加Feign的依赖,并创建一个或多个接口来定义你的HTTP请求。然后,你可以将这些接口发布为一个公共的API。
其次,在你的其他模块中,你可以引入这个Feign客户端模块,并使用这些接口来发送HTTP请求。这样,你就可以将这些HTTP请求代码从你的主应用程序代码中分离出来,使得你的主应用程序更易于理解和维护。
为什么要将Feign客户端抽取为一个模块呢?有以下几个原因:
- 代码复用:如果你有许多服务需要调用,那么将Feign客户端抽取为一个模块可以让你在多个服务中复用这些代码
- 易于管理:将Feign客户端抽取为一个模块可以让你的主应用程序代码更加清晰和易于管理
- 易于测试:将Feign客户端抽取为一个模块可以使得测试更加简单。你可以在一个模块中测试所有的HTTP请求代码
- 易于扩展:将Feign客户端抽取为一个模块可以使得扩展更加简单。如果你需要添加新的HTTP请求 只需要在Feign客户端模块中添加新的接口即可
实现Feign最佳实践
实现步骤如下
第一步:新建feign模块引依赖
第二步:将client和配置类等等,挪到feign中
第三步:把主模块的依赖和导包改掉即可,import feign的包.接着重启测试即可
注意点:
以上步骤操作完以后会报错(无法找到feign对应类的实例)
因为要在类中自动注入,来使用feign的类时,spring会扫描是否有对应的bean类并注册
但是由于spring默认扫描范围在本模块,因此不会将feign模块的注入
所以我们需要另外指定扫描的范围