SpringCloud开发实战(五):Feign的一些优化建议

目录
SpringCloud开发实战(一):搭建SpringCloud框架
SpringCloud开发实战(二):通过RestTemplate实现远程调用
SpringCloud开发实战(三):集成Eureka注册中心
SpringCloud开发实战(四):Feign远程调用

前言

我们在SpringCloud开发实战(四):Feign远程调用 这篇文章中使用Feign来替代RestTemplate实现远程调用。但是默认的Feign其实还有可以优化的空间。

因为Feign底层发起Http请求,实际上是依赖于其他的框架来实现的。其底层客户端实现包括:

  • URLConnection:默认实现,不支持连接池
  • Apache HttpClient :支持连接池
  • OKHttp:支持连接池

因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。这里我们用Apache的HttpClient来演示。

一、引入依赖

我们在order-service的pom文件中引入Apache的HttpClient依赖:

java 复制代码
<!--httpClient的依赖 -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

二、配置连接池

我们在order-service的application.yml中添加配置:

java 复制代码
feign:
  client:
    config:
      default: # default全局的配置
        loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数

三、测试

接下来,我们在FeignClientFactoryBean中的loadBalance方法中打断点,鼠标移动在openfeign上,然后按Ctrl+鼠标左键

然后会自动跳到openfeign包,然后我们找到FeignClientFactoryBean,双击打开

接下来,在FeignClientFactoryBean中的loadBalance方法中打断点:

接着我们通过Debug方式启动order-service服务,然后调用接口,可以看到这里的client,底层就是Apache HttpClient:

四、总结

最后我们来总结一下Feign的优化:

  1. 日志级别尽量用basic

  2. 使用HttpClient或OKHttp代替URLConnection

    • 引入feign-httpClient依赖

    • 配置文件开启httpClient功能,设置连接池参数

相关推荐
步行cgn4 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风4 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
明月_清风5 小时前
AI 越来越强,程序员真正的价值到底是什么?
人工智能·后端
aramae5 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路5 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
码事漫谈6 小时前
别再跟AI说“请”了,它根本不 care——但有个东西它超在意
后端
郑州光合科技余经理8 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
IT_陈寒9 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
需要8269 小时前
MySQL 索引 B+ 树与“查询为什么变慢了
java·spring boot·spring·spring cloud·tomcat
颜进强9 小时前
01 · NestJS 是什么:用途、解决什么问题、与热门框架对比
前端·后端·ai编程