简介:Feign是Netflix开发的声明式,模板化的HTTP客户端,简化了HTTP的远程服务的开发。Feign是在RestTemplate和Ribbon的基础上进一步封装,使用RestTemplate实现Http调用,使用Ribbon实现负载均衡。我们可以看成 Feign = RestTemplate+Ribbon

目录

1、Feign替代RestTemplate

1.1 Feign的使用步骤

2、自定义配置

2.1 Feign部分自定义配置

2.2 修改Feign自定义配置

2.2.1 方式一

2.2.2 方式二

3、Feign性能优化

3.1 Feign性能优化原理

3.2 实现Apache HttpClient

4、Feign最佳实践

4.1 方式一(继承)

4.2 方式二(抽取)

4.2.1 方式二(抽取)案例

4.3 Feign的包扫描

5、总结


1、Feign替代RestTemplate

1.1 Feign的使用步骤

图 1.1-1 Feign的使用步骤

步骤一

步骤二

上图中展示的是Feign的调用步骤,相较于RestTemplate法更加的方便,代码更简洁。

2、自定义配置

2.1 Feign部分自定义配置

图 2.1-1 部分自定义配置
上图中展示的是Feign运行的配置

2.2 修改Feign自定义配置

2.2.1 方式一
图 2.2.1-1 修改配置文件
上图中展示的就是修改Feign自定义配置——日志配置的方法
2.2.2 方式二
图 2.2.2-1 修改配置文件
上图中展示的就是修改Feign自定义配置——日志配置的方法

3、Feign性能优化

3.1 Feign性能优化原理

图 3.1-1 Feign性能优化原理
上图中展示的Feign性能优化的原因,即默认情况下Feign底层不支持连接池,所以在发送请求时性能会受到影响,这里通过改变底层实现达到支持连接池的目的

3.2 实现Apache HttpClient

图 3.2-1 实现Apache HttpClient
上图中展示的是改变Feign底层,实现Apache HttpClient,从而让微服务连接支持连接池,提高性能

4、Feign最佳实践

4.1 方式一(继承)

图 4.1-1 方式一(继承)

上图中展示的是通过继承的方式实现统一接口:

即将微服务中的 FeignClient 定义的接口方法和被访问的提供者 Controller 中的方法统一一个标准

4.2 方式二(抽取)

图 4.1 方式一(抽取)
上图中展示的是通过抽取的方式实现统一接口,不好的一点就是在抽取出来的独立模块中集合了大量的函数,当消费者引用的有许多的函数使用不上的,所以产生了代码冗余,但是这里还是建议使用方式二作为标准。
4.2.1 方式二(抽取)案例
图 4.2.1-1 (抽取)案例步骤一

实现最佳实践方式二的步骤如下:

  1. 首先创建一个module,命名为feign-api,然后引入feignstarter依赖
  2. order-service中编写的UserClientUserDefaultFeignConfiguration都复制到feign-api项目中
  3. order-service中引入feign-api的依赖
  4. 修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
  5. 重启测试
上图展示的便是详细步骤,按照这样操作就可实现模块的抽取

4.3 Feign的包扫描

4.3-1 Feign的包扫描两种方式
这里还是建议使用方式二,因为这样不会有代码冗余

5、总结

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐