Feign入门讲解

2024-09-07 20:12
文章标签 讲解 入门 feign

本文主要是介绍Feign入门讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.编写接口

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远程调用就是调用接口中的方法(下面的第二步)
    @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这个接口

 

这篇关于Feign入门讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146047

相关文章

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就