当前位置: 首页 > news >正文

SpringCloud入门(九)Feign实战应用和性能优化

一、Feign实战应用

       

Feign的客户端与服务提供者的controller代码非常相似:
有没有一种办法简化这种重复的代码编写呢?
方式一:继承
优点: 简单。实现了代码共享。
缺点:服务提供方、服务消费方紧耦合。参数列表中的注解映射并不会继承,因此Controller中必须再次声明方法、参数列表、注解。


 方式二:抽取。

 抽取:将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。

        例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包,即可直接使用。

实现抽取的步骤如下:

1.首先创建一个module,命名为feign-api,然后引入feign的starter依赖
2.将order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中
3.在order-service中引入feign-api的依赖
4.修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包
5.重启测试

具体实现如下:


步骤1:首先创建一个module,命名为feign-api:

步骤2:在feign-api中然后引入feign的starter依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

步骤3:然后,order-service中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中:

步骤4:在order-service中使用feign-api

首先,删除order-service中的UserClient、User、DefaultFeignConfiguration等类或接口。

在order-service的pom文件中中引入feign-api的依赖:

<dependency><groupId>cn.it.feign</groupId><artifactId>feign-api</artifactId><version>1.0</version>
</dependency>

修改order-service中的所有与上述三个组件有关的导包部分,改成导入feign-api中的包

步骤5:重启测试:

因为UserClient现在在cn.it.feign.clients包下,而order-service的@EnableFeignClients注解是在cn.it.order包下,不在同一个包,无法扫描到UserClient。

解决扫描包问题:

方式一:

指定Feign应该扫描的包:

@EnableFeignClients(basePackages = "cn.it.feign.clients")

方式二:

指定需要加载的Client接口:

@EnableFeignClients(clients = {UserClient.class})

二、Feign性能优化

Feign底层的客户端实现:
URLConnection:默认实现,不支持连接池。
Apache HttpClient :支持连接池。
OKHttp:支持连接池。

因此优化Feign的性能主要包括:

1.使用连接池代替默认的URLConnection。
2.日志级别,最好用basic或none。

Feign的优化:
1.日志级别尽量用basic
2.使用HttpClient或OKHttp代替URLConnection:(1)引入feign-httpClient依赖。(2)配置文件开启httpClient功能,设置连接池参数


http://www.mrgr.cn/news/38521.html

相关文章:

  • OpenCV透视变换:原理、应用与实现
  • Makefile编程:4种赋值差异
  • MySQL基础--表的增删改查
  • 算法复杂度-空间
  • 找不到msvcp110.dll怎么办,总结6种解决msvcp110.dll的方法
  • 大数据毕业设计选题推荐-食品销售数据分析系统-Hive-Hadoop-Spark
  • css 数字比汉字要靠上
  • 【刷点笔试面试题试试水】 i++与++i哪个效率更高?
  • webpack 和 vite 区别
  • Accelerate单卡,多卡config文件配置
  • 对小白友好的与易我同级别四款剪辑工具推荐:
  • Xshell连接服务器
  • Spring Boot 整合 Keycloak
  • 花都狮岭寄宿自闭症学校:开启孩子的生命之门
  • 使用python获取百度一下,热搜TOP数据详情
  • 芝士AI写作有什么特色? 大模型支撑,智能改写续写,让写作更轻松
  • RHCS认证-Linux(RHel9)-Ansible
  • Python自学查漏9.28
  • [论文阅读] ChartInstruct: Instruction Tuning for Chart Comprehension and Reasoning
  • Java高效编程(10):重写equals时必须遵循通用约定