Feign入门讲解

server/2024/10/20 21:13:18/

1.引入

之前在讲解服务之间的远程调用的时候都是用RestTemplate来发送HTTP请求,但这种方式显得比较冗余,不方便维护,所以现在使用Feign来代替这种方式

  • Feign是一个声明式HTTP客户端,专门用来发送HTTP请求

2.快速入门

2.1.引入依赖

  <!--feign的客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

注意:Feign版本高于Hoxton.M2 RELEASED版本之后不再使用ribbon作为负载均衡器,而是使用loadbalancer,所以还要引入以下依赖:

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

不仅要引入loadbalancer依赖,还要在Nacos依赖中排除ribbon的依赖,如下:

  <!--nacos客户端依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><exclusions><exclusion><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></exclusion></exclusions></dependency>

2.2.开启Feign客户端

引入依赖之后,需要在启动类添加注解来开启Feign客户端,并且把它注册到spring中

2.3.编写接口

java">import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;@FeignClient("userService")
public interface UserClients {@GetMapping("/user/{id}")User findById(@PathVariable Long id);
}
  • 在这个接口中,首先需要一个@FeignClient注解,用来表明远程调用的服务名称
  • 在接口中编写一个方法,这个方法就是远程调用userService服务的方法,其样式和controll接口中的格式基本一致,要表明调用的路径,这里返回值是User实体类,表明调用之后获取的数据就封装到User中

2.4.调用接口

  • 注入刚刚编写的接口
  • feign远程调用就是调用接口中的方法(下面的第二步)
java">    @Autowiredprivate UserClients userClients;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// 2.用feign远程调用User user = userClients.findById(order.getUserId());// 3.把user对象封装到order中order.setUser(user);// 4.返回return order;
}

 2.5.小结

这样一对比,以往的RestTemplate,不仅把url暴露在外面,而且路径一长就不好维护了,而这个feign不仅把路径统一管理在接口中,而且不暴露url,可维护性更高

 3.实现Feign的最佳实践

假如有多个服务都需要远程调用user-service这个服务,那每次都在服务里编写UserClient显得就很麻烦,那么此时我们就可以把这个UserClient抽出来,放到另外一个专门用来存放Client的服务中,别的服务要用的时候,只需要把依赖导入进去就可以了

原来的模式: 

 现在的模式:

 

接下来讲讲如何实现 

feign-api目录 

把order-service中的clients包里的UserClients接口和pojo包里的User类移动到这个新建的服务中,然后引入feign的依赖

 <!--feign客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

现在有了单另的专门存放Client的服务,那就把原来的服务中的对应的部分删除掉,具体删的就是存放进feign-api中的部分

注意: 

这个时候项目可能会报错,说无法用@Autowired注入UserClient接口,说没有相应的bean,这个时候就要注意了,我们在上面的2.2小节中讲到@EnableFeignClients不仅有开启feign的功能,并且有这个注解后这个接口就可以被spring扫描到,并创建对应的bean

  • 而在order-service服务中,spring默认扫描的包是启动类所在的包,而在这个包里可没有UserClient,他已经被移到feign-api这个服务里了,所以我们现在要让spring扫描到这个UserClient可以这么做: 
  • 在@EnableFeignClients后面添加配置,指定其扫描UserClient这个接口

 


http://www.ppmy.cn/server/113523.html

相关文章

2024国赛数学建模评价类算法解析,2024国赛数学建模C题思路模型代码解析

2024国赛数学建模评价类算法解析&#xff0c;2024国赛数学建模C题思路模型代码解析&#xff1a;9.5开赛后第一时间更新&#xff0c;更新见文末名片 1 层次分析法 基本思想 是定性与定量相结合的多准则决策、评价方法。将决策的有关元素分解成目标层、准则层和方案层&#xff…

Selenium 实现图片验证码识别

前言 在测试过程中&#xff0c;有的时候登录需要输入图片验证码。这时候使用Selenium进行自动化测试&#xff0c;怎么做图片验证码识别&#xff1f;本篇内容主要介绍使用Selenium、BufferedImage、Tesseract进行图片 验证码识别。 环境准备 jdk&#xff1a;1.8 tessdata&…

如何实现加密功能

文章目录 1. 概念介绍2. 方法与功能2.1 基本用法2.2 加密算法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FlutterCacheManager组件"相关的内容&#xff0c;本章回中将介绍一个加密工具包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 加密主要…

基于SpringBoot的校园跑腿系统+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

linux下oracle启动及关于pfile和spfile启动参数文件的配置

在现代企业环境中&#xff0c;Oracle数据库作为关键的业务支撑平台&#xff0c;承载着大量的数据处理和事务管理任务。 无论是对于DBA&#xff08;数据库管理员&#xff09;还是开发人员来说&#xff0c;掌握Oracle数据库的基本操作和配置技巧都是至关重要的。本文提供了一份全…

详细介绍msvcr120.dll文件以及修复msvcr120.dll丢失的几种方法

遇到“msvcr120.dll丢失”错误通常会在尝试运行某些程序时发生&#xff0c;这类错误提示“程序无法启动&#xff0c;因为您的计算机缺少msvcr120.dll文件。”这可能导致许多用户感到困扰和不便。有几个步骤可以帮助你轻松修复“msvcr120.dll丢失”错误&#xff0c;保证应用程序…

Node.js学习记录(一)

目录 一、文件读取 readFile 二、写入文件 writeFile 三、动态路径 __dirname:表示当前文件所处的目录、path.join 四、获取路径文件名 path.basename 五、提取某文件中的css、JS、html 六、http 七、启动创建web服务器 服务器响应 八、将资源请求的 url 地址映射为文…

ssm微信小程序校园失物招领论文源码调试讲解

第二章 开发技术与环境配置 以Java语言为开发工具&#xff0c;利用了当前先进的SSM框架&#xff0c;以MyEclipse10为系统开发工具&#xff0c;MySQL为后台数据库&#xff0c;开发的一个微信小程序校园失物招领。 2.1 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于20…