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依赖:

XML 复制代码
<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的依赖:

XML 复制代码
<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应该扫描的包:

java 复制代码
@EnableFeignClients(basePackages = "cn.it.feign.clients")

方式二:

指定需要加载的Client接口:

java 复制代码
@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功能,设置连接池参数

相关推荐
Chen-Edward1 小时前
有了Spring为什么还有要Spring Boot?
java·spring boot·spring
云创智城-yuncitys1 小时前
SpringCloud 架构在智慧交通路侧停车系统中的实践:从技术落地到城市级服务升级
spring·spring cloud·架构·智慧城市·停车系统·充电系统源码
陈小桔2 小时前
idea中重新加载所有maven项目失败,但maven compile成功
java·maven
小学鸡!2 小时前
Spring Boot实现日志链路追踪
java·spring boot·后端
xiaogg36782 小时前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
逆光的July2 小时前
Hikari连接池
java
微风粼粼3 小时前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
番茄Salad3 小时前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
天若有情6733 小时前
Spring MVC文件上传与下载全面详解:从原理到实战
java·spring·mvc·springmvc·javaee·multipart
祈祷苍天赐我java之术3 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap