首页 > 其他分享 >SpringCloud入门(九)Feign实战应用和性能优化

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

时间:2024-11-25 21:58:11浏览次数:11  
标签:Feign 入门 service SpringCloud feign api UserClient order

  一、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功能,设置连接池参数

标签:Feign,入门,service,SpringCloud,feign,api,UserClient,order
From: https://www.cnblogs.com/kongsq/p/18568851

相关文章

  • SpringCloud入门(十)统一网关Gateway
    一、网关的作用SpringCloudGateway是SpringCloud的一个全新项目,该项目是基于Spring5.0,SpringBoot2.0和ProjectReactor等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。网关架构图: 网关......
  • SpringCloud入门(七)Feign声明式远程调用
    利用RestTemplate发起远程调用的代码,存在下面的问题:代码可读性差,编程体验不统一。参数复杂URL难以维护。Feign是一个声明式的http客户端,官方地址:https://spring.io/projects/spring-cloud-openfeign 。其作用是帮助我们优雅的实现http请求的发送。一、使用Feign实......
  • SpringCloud入门(八)Feign自定义配置
    一、Feign自定义配置Feign可以支持很多的自定义配置,如下表所示:-类型:feign.Logger.Level作用:修改日志级别说明:包含四种不同的级别:NONE、BASIC、HEADERS、FULL-类型:feign.codec.Decoder作用:响应结果的解析器说明:http远程调用的结果......
  • 【网络安全渗透测试零基础入门】之cve漏洞实战案例解析(非常详细)
    一、前言这是我给粉丝盆友们整理的网络安全渗透测试入门阶段文件包含渗透与防御教程本文主要讲解漏洞丨实例分析cve2012-0158喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。一、漏洞简介MicrosoftOffice2003sp3是2007年9月18日由微软公司创作的一个办......
  • 51单片机入门:LED灯控制(01)
    第一篇博客,博客园注册很久却一直没有好好利用,今天把以前的文章都删掉,就当开个好头吧。希望在以后的时间中,自己能够认真、努力、珍惜时间。零基础入门51单片机单片机(MicrocontrollerUnit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器(RAM和ROM)、输入/输出接口(I/O)等集成在一个芯......
  • 递推进阶与入门递归
    一、递推进阶,勇攀高峰昆虫繁殖题目描述科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过X个月产Y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过X个月产卵),问过Z个月以后,共有成虫多少对......
  • Flink 从入门到实战
    Flink中的批和流批处理的特点是有界、持久、大量,非常适合需要访问全部记录才能完成的计算工作,一般用于离线统计。流处理的特点是无界、实时,无需针对整个数据集执行操作,而是对通过系统传输的每个数据项执行操作,一般用于实时统计。一个无界流可以分解为多个有界流性能F......
  • 第5天:基础入门-APP应用&微信小程序&原生态开发&H5+Vue技术&封装打包&反编译抓包点
    #知识点1、基础入门-APP应用-开发架构安全问题2、基础入门-小程序应用-开发架构安全问题一、APP应用开发架构:1、原生开发安卓一般使用java语言开发,当然现在也有kotlin语言进行开发。如何开发就涉及到具体编程了,这里就不详说了。简单描述就是使用安卓提供的一系列......
  • 第4天:基础入门-Web应用&蜜罐系统&堡垒机运维&API内外接口&第三方拓展结构&部署影响
    #知识点:1、基础入门-Web应用-蜜罐系统2、基础入门-Web应用-堡垒机运维3、基础入门-Web应用-内外API接口4、基础入门-Web应用-第三方拓展架构一、蜜罐:https://hfish.net/测试系统:Ubuntu20.04一键安装:bash<(curl-sS-Lhttps://hfish.net/webinstall.sh)1、有......
  • SpringCloud入门(六)Nacos注册中心(下)
    一、Nacos环境隔离Nacos提供了namespace来实现环境隔离功能。  nacos中可以有多个namespace。namespace下可以有group、service等。不同namespace之间相互隔离,例如不同namespace的服务互相不可见。使用NacosNamespace环境隔离步骤:1.在Nacos控制台可以创建n......