Feign入门讲解

news2024/12/24 9:48:11

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远程调用就是调用接口中的方法(下面的第二步)
    @Autowired
    private 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.coloradmin.cn/o/2113338.html

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

相关文章

万向轮[随动轮]介绍--偏心距

万向轮[随动轮]介绍 1 概述1.1 偏心距定义1.2 偏心距对回旋性能、力矩和寿命的影响1.3 车轮类型分类1.4 轮子特性要求【耐磨、减震、高载重、保护地面不留痕迹及抗静电】1.5 材质【橡胶、聚氨酯、尼龙、金属、酚醛树脂、MC尼龙】1.6 胎面纹路【咬花纹、人字纹、平面、咬花纹人字…

【Linux】读者写者问题与读写锁

终此一生&#xff0c;只有两种办法&#xff1a; 要么梦见生活&#xff0c;要么落实生活。 --- 勒内・夏尔 --- 读写锁和自旋锁 1 读者写者问题2 读写锁3 读写锁的两大特性 1 读者写者问题 读者写者是一种生产消费模型&#xff0c;所以就满足"321"原则&#xff1a…

Node.js和vue3实现GitHub OAuth第三方登录

Node.js和vue3实现GitHub OAuth第三方登录 前言 第三方登入太常见了&#xff0c;微信&#xff0c;微博&#xff0c;QQ…总有一个你用过。 在开发中&#xff0c;我们希望用户可以通过GitHub账号登录我们的网站&#xff0c;这样用户就不需要注册账号&#xff0c;直接通过GitHu…

mysql树形结构返回是否叶子节点

我们界面上展示树形结构的时候往往会用到懒加载&#xff0c;做懒加载需要知道哪个节点是叶子节点&#xff0c;这样叶子节点就不需要继续往下加载了&#xff0c;这种需求可以通过sql实现 先来看下表结构 方式一,通过sql语句直接获取leaf 什么是叶子节点&#xff1f;就是没有哪…

海外云服务器安装 Redis 6.2.x (Ubuntu 18.04 记录篇三)

本文已首发于 秋码记录 通过前两篇的实践&#xff0c;我们已然在海外云服务器/VPS安装了JDK和MariaDB数据库&#xff0c;一个能够运行Java项目的海外云服务器/VPS算是告一段落了。 然而&#xff0c;在这请求量与日俱增的情况下&#xff0c;MariaDB数据库显然是在超负债的工作…

《黑暗之魂2:原罪学者》是什么类型的游戏 《黑暗之魂》可以在苹果Mac电脑上玩吗?

在宏大的世界观游戏中&#xff0c;《黑暗之魂2:原罪学者》脱颖而出&#xff0c;以其探索性和挑战性征服了全球玩家的心灵。下面我们来看看《黑暗之魂2:原罪学者》是什么类型的游戏&#xff0c;《黑暗之魂2:原罪学者》可以在苹果电脑玩吗的相关内容。 一、《黑暗之魂2:原罪学者》…

[计算机网络]-计网学习笔记-计网知识点总结(附完整笔记)

本笔记是跟着 b站 湖科大教书匠 视频做的笔记&#xff0c;其中图片为视频中的 PPT&#xff0c;加上了自己的注释。 这是原视频链接。大家可以参照着笔记看原视频。视频中的 PPT 做的非常好。 【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】https://www.bilib…

TOPSIS法详细讲解+Python代码实现

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

数据结构——双链表实现和注释浅解

关于双链表的基础部分增删查改的实现和一点理解&#xff0c;写在注释里~ 前言 浅记 1. 哨兵位的节点不能被删除&#xff0c;节点的地址也不能发生改变&#xff0c;所以是传一级指针 2. 哨兵位并不存储有效数据&#xff0c;所以它并不是有效节点 3. 双向链表为空时&#xff…

单点登录:cas单点登录实现原理浅析

cas单点登录实现原理浅析 一晃几个月没写博客了&#xff0c;今年多灾多难的一年。 安能摧眉折腰事权贵&#xff0c;使我不得开心颜&#xff01; 财富是对认知的补偿&#xff0c;不是对勤奋的嘉奖。勤奋只能解决温饱&#xff0c;要挣到钱就得预知风口&#xff0c;或者有独到见解…

探寻 IP 代理地址繁多之因

在当今的网络天地里&#xff0c;IP 代理服务随处可见&#xff0c;且令人称奇的是&#xff0c;它们常常手握海量的 IP 地址可供挑选。那么&#xff0c;究竟是什么原因使得 IP 代理拥有如此众多的地址呢&#xff1f;现在&#xff0c;就让我们一同深入探究这个神秘现象背后的缘由。…

Camunda调用子流程案例

调用子流程 调用子流程是指子流程在主流程的外面。子流程一般是多个流程可重用的流程&#xff0c;也可以独立调用子流程。 可以对比编程中的方法抽取。子流程运行时&#xff0c;主流程也是等待状态。子流程结束&#xff0c;主流程继续。 BPMN设计 主流程 全局配置 上传视频 处…

并查集基础与简单扩展应用

并查集 基础题目路径压缩 扩展应用扩展题目1扩展题目2 并查集的结构是一棵树 并查集有两种功能&#xff0c;一种是判断两个元素是否在同一集合&#xff0c;第二种是合并两个集合 并查集的实现需要记录每个节点的父亲节点 判断两个元素是否在同一集合&#xff0c;即判断两个元…

ARM编程模型、指令集、ARM汇编语言程序设计

一、编程模型 1.1数据和指令类型 在之后的演示当中&#xff0c;我们大多数将采用ARM指令集 1.2处理器工作模式 1.3ARM寄存器 1.3.1分类 &#xff08;1&#xff09; 31 个通用寄存器&#xff0c;包括 PC&#xff08;程序计数器&#xff09;在内&#xff0c;都是 32 位的寄存器…

实习项目|苍穹外卖|day7

缓存菜品 1.根据原型进行需求分析与设计&#xff08;接口文档&#xff09; 2.根据接口设计DTO&#xff08;redis数据类型选取&#xff09; 3.编码controller-》service-》mapper GetMapping("/list")ApiOperation("根据分类id查询菜品")public Result<…

51单片机-第十三节-直流电机驱动(PWM)

一、直流电机介绍&#xff1a; 直流电机是一种将电能转换为机械能的装置。 一般的直流电机有两个电极&#xff0c;电极正接&#xff0c;电机正转&#xff0c;电极反接&#xff0c;电机反转。 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转子&#…

GB35114 USC安防平台 中星微国密摄像机配置 流程

中星微国密摄像机配置介绍 如下以中星微VS-IPC8021S-Y-T4摄像机为例&#xff0c;需要先各自获取p10文件&#xff0c;并通过证书签发机构或者测试SM2证书签发获取证书。 网络配置如下: 摄像机的IP地址为192.168.1.108&#xff0c;国标ID为34020000001320000015 系统的IP地址…

Robotframework框架基础

1.Robot Framework是开源的自动化测试框架&#xff0c;基于关键字驱动的测试方法2.它提供用于创建和执行自动化测试的工具和库&#xff0c;并支持使用不同的测试库和插件进行扩展 一.以下是Robot Framework框架的基础知识 1. 安装&#xff1a;通过pip安装Robot Framework和相…

打造可视化数字大屏供应链管理平台详解:从食堂采购系统源码开始

这篇文章将深入探讨直播美颜SDK与主播美颜工具的技术原理及其发展趋势&#xff0c;帮助开发者了解如何通过技术手段实现流畅、高效的实时美颜效果。 一、什么是直播美颜SDK&#xff1f; 直播美颜SDK是一种为开发者提供实时美颜功能的集成开发工具包。它通过对摄像头捕捉到的画…

现代计算机中数字的表示与浮点数、定点数

现代计算机中数字的表示与浮点数、定点数 导读&#xff1a;浮点数运算是一个非常有技术含量的话题&#xff0c;不太容易掌握。许多程序员都不清楚使用操作符比较float/double类型的话到底出现什么问题。这篇文章讲述了浮点数的来龙去脉&#xff0c;所有的软件开发人员都应该读…