SpringCloud开发实战(六):Feign的最佳实践

news2024/12/24 19:12:29

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

前言

所谓最佳实践,就是使用过程中总结的经验,最好的一种使用方式。我们可以发现,Feign的客户端与服务提供者的controller代码非常相似:

feign客户端:

在这里插入图片描述

UserController:

在这里插入图片描述
这样冗余的代码我们肯定是要简化的。

一、继承方式

一样的代码我们可以通过继承来共享:

1)定义一个API接口,利用定义方法,并基于SpringMVC注解做声明。

2)Feign客户端和Controller都集成这个接口

在这里插入图片描述

优点

  • 简单
  • 实现了代码共享

缺点

  • 服务提供方、服务消费方紧耦合
  • 参数列表中的注解映射并不会继承,因此Controller中必须再次声明方法、参数列表、注解

二、抽取方式

将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。
例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包,即可直接使用。

在这里插入图片描述

1. 抽取

首先创建一个module,命名为feign-api:
在这里插入图片描述
然后在feign-api中然后引入feign的starter依赖

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

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

在这里插入图片描述

2. 在order-service中使用feign-api

首先,删除order-service中的UserClient、User等类或接口。在order-service的pom文件中引入feign-api的依赖:

<dependency>
	<groupId>org.demo</groupId>
	<artifactId>feign-api</artifactId>
	<version>1.0</version>
</dependency>

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

3. 测试

在这里插入图片描述

注:解决扫描包的问题

如果出现下面图片所示问题,代表包的扫描位置有问题在这里插入图片描述

解决方式一

在启动类上指定Feign应该扫描的包:

@EnableFeignClients(basePackages = "org.demo.client")

解决方式二

或者在启动类上指定需要加载的Client接口:

@EnableFeignClients(clients = {UserClient.class})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107368.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的高校BBS在线互动论坛系统

&#x1f4a5;&#x1f4a5;源码和论文下载&#x1f4a5;&#x1f4a5;&#xff1a;基于SpringBoot的高校BBS在线互动论坛系统-源码论文报告数据库.rar 1. 系统介绍 本论文设计并实现了一个基于Spring Boot和Vue的校园论坛系统&#xff0c;该系统分为用户和管理员两个角色。用户…

9/4 链表-力扣 234、19

234.回文链表 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表&#xff1b;如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 思考&#xff1a;链表遍历只能从前往后&a…

Android studio 更换下载的gradle

首先我们下载gradle 打个比方如果我们下载了一个github上的项目&#xff0c;而它使用的是gradle-6.5-bin.zip https://services.gradle.org/distributions/gradle-6.5-bin.zip 用浏览器去下载&#xff0c;可能需要翻墙 解压到电脑里 找到setting里的这一项&#xff0c;设置…

plc1200 weiluntong001

快接口 快代码 main代码 电脑IP地址 编译&#xff0c;启动仿真&#xff0c;下载到仿真PLCsim 必要时候可以设备离线。 打开并监视块。 打开netto plcsim 添加 本机IP&#xff0c;选择&#xff0c;双击。 PLC启动仿真之后&#xff0c;出现这个IP地址&#xff0…

88、k8s之pv+pvc

一、pv和pvc pv pv&#xff1a;Persistent volume 是k8s虚拟化的存储资源&#xff0c;实际上就是存储&#xff0c;例如本地的硬盘&#xff0c;网络文件系统&#xff08;nfs&#xff09; lvm RAID oss&#xff08;ceph&#xff09; 云存储。 pvc pvc&#xff1a;Persisten…

关于SPI通信失败的一种情况(CRC校验不匹配的问题)

问题 该项目中&#xff0c;使用外置的ADC芯片采集电压电流&#xff0c;主控MCU通过SPI与ADC芯片通信。调试时&#xff0c;SPI通信一直失败&#xff0c;与之前成功的项目对比&#xff0c;发现是SPI配置的问题。 void MX_SPI2_Init(void) {/* USER CODE BEGIN SPI2_Init 0 *//*…

2024.9计算机视觉设计开发工程师专项培训通知

为进一步贯彻落实中共中央印发《关于深化人才发展体制机制改革的意见》和国务院印发《关于“十四五”数字经济发展规划》等有关工作的部署要求&#xff0c;深入实施人才强国战略和创新驱动发展战略&#xff0c;加强全国数字化人才队伍建设&#xff0c;持续推进人工智能从业人员…

fastadmin 文件上传腾讯云

1-安装腾讯云SDK composer require qcloud/cos-sdk-v5 2-腾讯云配置 <?phpnamespace app\common\controller;use Qcloud\Cos\Client; use think\Controller; use think\Db;class Tencent extends Controller {/*** 上传文件* param $config* param $key* return array*/p…

微信公众号《GIS 数据工程:开始您的 ETL 之旅 》 文章删除及原因

微信公众号多次限制付费文章发布&#xff0c;不太明确其原因。我猜可能是得罪了某位大神&#xff0c;这倒是也不是不可能。我这说话口无遮拦&#xff0c;得罪几个人偶尔搞我一下也是应该的 。当然也可能是部分喜欢白嫖的网友一看我收费就不太高兴&#xff0c;偶尔做点小动作也是…

Windows系统下苹果虚拟机系统的安装

前言 搞苹果软件开发&#xff0c;未必要购买贵的苹果电脑。可以安装黑苹果系统&#xff0c;也可以安装VMware的苹果虚拟机。而且通过我的实践发现&#xff0c;目前苹果虚拟机的效果很不错。 1、参考文档链接 VM虚拟机怎么安装mac os&#xff1f;&#xff08;全教程&#xff0…

【LeetCode】03.无重复字符的最长子串

题目要求 做题链接3.无重复字符的最长子串 解题思路 我们通过参考给出的输入很容易就会从每一个字符开始&#xff0c;看看最长能延续多长。我们通过画图发现一旦一个字符可以延续到另一个字符&#xff0c;那么我们就不需要考虑他中间仍然存在字符重复的问题。因此而后我们发…

部署mongosh教程

1、上传软件包 将软件包上传到/usr/local目录下 部署 2.1 解压 tar zxvf mongosh-2.3.0-linux-x64.tgz 2.2 修改名称 mv mongosh-2.3.0-linux-x64/ mongosh 2.3 将 bin 目录中 mongosh 二进制文件复制到 PATH 变量中列出的目录中 sudo cp mongosh /usr/local/bin/ sudo cp …

第九届“创客中国”生成式人工智能中小企业创新创业大赛招商推介圆满落幕

金秋九月,丹桂飘香。9月2日晚,第九届“创客中国”生成式人工智能(AIGC)中小企业创新创业大赛招商推介会在南昌高新区艾溪湖畔成功举办。南昌市政府副秘书长、办公室党组成员陈吉炜出席并致辞。市中小企业局党组书记、市工信局党组书记、局长骆军出席。南昌高新区党工委委员、管…

16 C语言连接

使用c语言连接mysql&#xff0c;需要使用mysql官网提供的库&#xff0c;可以在官网下载 准备工作&#xff1a; 保证mysql服务有效 官网下载合适的mysql connect库 也可以直接安装mysql服务 yum install -y mysql-devel Connector/C使用 库格式如下&#xff1a; [hbMiWiFi-R1…

无线麦克风推荐,无线麦克风十大名牌,领夹麦克风十大品牌推荐

在音频创作的专业舞台上&#xff0c;无线领夹麦克风不仅是声音捕捉的利器&#xff0c;更是创作者表达情感的桥梁。然而&#xff0c;市场上琳琅满目的产品让人眼花缭乱&#xff0c;不少劣质麦克风不仅收音效果大打折扣&#xff0c;还常因信号不稳、噪音干扰而破坏了作品的纯净度…

使用NI CANopen与多个节点进行通信

要使用N CANopen同时与多个节点进行通信&#xff0c;可以利用CANopen Library Toolkit提供的不同VI。以下是详细的步骤说明&#xff1a; 了解VI的功能&#xff1a; NMT Write.vi&#xff1a; 该VI用于向特定节点或所有节点发送网络管理&#xff08;NMT&#xff09;命令。使用No…

Linux之多线程概念

目录 线程概念 线程共享的资源 线程独有的资源 线程优点 线程缺点 在之前&#xff0c;我们已经学习了进程相关的知识点&#xff0c;如进程的基本概念和基本操作&#xff0c;本期我们将开始进行线程的学习&#xff0c;探索线程和进程的关系。 线程概念 在学习线程之前…

镭速助力构筑ICT安全高效的大文件传输

在数字化浪潮的推动下&#xff0c;信息通信技术&#xff08;ICT&#xff09;行业正以惊人的速度发展&#xff0c;随之而来的是跨国、跨区域文件传输需求的激增。然而&#xff0c;传统的大文件传输方法已难以满足当前ICT行业的需求&#xff0c;面临着诸多挑战&#xff0c;如跨国…

多用户B2B2C商城源码+短视频直播+APP+小程序+H5

店铺管理 店铺列表&#xff0c;新店铺审核&#xff0c;地址管理&#xff0c;服务管理&#xff0c;运费模版&#xff0c;品牌管理 订单监管 视频订单&#xff0c;拼团订单&#xff0c;评论管理&#xff0c;退款管理 装修商城 模版管理&#xff0c;页面管理&#xff0c;全局…

太速科技-1路万兆光纤SFP+和1路千兆网络 FMC子卡模块

1路万兆光纤SFP和1路千兆网络 FMC子卡模块 一、概述 该板卡是基于kc705和ml605的fmc 10g万兆光纤扩展板设计&#xff0c;提供了1路万兆光纤SFP和1路千兆网络接口。可搭配我公司开发的FPGA载卡使用。载卡可参考&#xff1a;ID204 SFP&#xff08;10 Gigabit Small…