Spring Cloud 中的OpenFeign+Ribbon详解

news2024/11/16 22:31:46

1 spring cloud 远程调用

没有看过的小伙伴可以点击传送门先去了解Nacos。有了Nacos做注册中心后,我们就可以获取其他服务的地址进行调用了。远程调用就需要用到我们今天的主角OpenFeign,如果被调用服务存在多个实例就需要进行负载均衡,负载均衡会使用Ribbon。

2 什么是OpenFeign

OpenFeign是用来让微服务之间远程调用的。是一种声明式、模板化的HTTP客户端。提供HTTP远程调用的方法,让远程调用更简单。

OpenFeign底层内置了Ribbon,用来完成调用时的负载均衡。

OpenFeign是在消费者端进行使用的。

调用流程:

1.生产者和消费者启动时会向Nacos进行服务注册。

2.消费者需要调用生产者时,会从Nacos拉取生产者地址列表。

3.消费者通过OpenFeign来调用生产者接口。当生产者有多个实例时,会通过Ribbon进行负载均衡,选择一台生产者服务器进行调用。

Nginx和Ribbon的区别:

Nginx主要负责的是服务端的负载均衡,Ribbon主要负责的是客户端的负载均衡。也就是说Nginx主要将用户请求负载到不同的服务器,Ribbon主要将各个微服务之间的调用进行负载

3 实战演练

1.在消费者pom文件中引入OpenFeign。

由于OpenFeign已经引入了Ribbon,所以我们只需要引入OpenFeign即可。

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

2.在消费者启动类上加@EnableFeignClients注解。

3.在生产者服务写一个被调用的接口

4.在消费者服务写一个OpenFeign远程调用的接口

注意:

@FeignClient注解中的value值是生产者在Nacos中注册的服务名。

@FeignClient注解中path值加上方法上的mapping值就是被调用接口的url。

5.在消费者服务调用生产者服务的接口即可。

4 超时时间设置

OpenFeign的超时时间是由底层的Ribbon控制的,Ribbon默认的超时时间是1秒,所以OpenFeign的默认超时时间也是1秒。我们可以通过直接修改Ribbon的超时时间来控制OpenFeign的超时时间。

在配置文件中添加下列配置即可修改OpenFeign超时时间。


ribbon.ReadTimeout=5000 #建立连接的时间5s
ribbon.ConnectTimeout=5000 #建立连接后到获取数据的时间5s

5 日志打印

使用OpenFeign进行服务调用时,默认是不打开日志的。如果需要查看调用参数等信息,可以配置OpenFeign自带的日志。

OpenFeign日志默认有四个等级:

1.NONE:不记录任何日志(默认值)。

2.BASIC:仅记录请求方法、URL、响应状态代码以及执行时间。

3.HEADERS:记录BASIC级别的基础上,记录请求和响应的header。

4.FULL:记录请求和响应的header、body和元数据。

第一步:添加一个OpenFeign配置类,如下图所示。

注意:

1.如果想要全局配置,针对所有调用的服务,就在配置类上添加@Configuration注解。

2.如果想要局部配置,针对某个服务,就不要加@Configuration注解

第二步:如果是局部配置,需要在服务调用接口处添加配置,如下图所示。

第三步:由于OpenFeign日志是debug级别,而SpringBoot日志默认是info级别,所以需要在配置文件中将日志级别改为debug级别。只需要修改上图中ProducterControllerFacade所在的包的日志级别即可

#将com.springcloudalibaba.user.openFeign包下的日志级别修改为debug
logging.level.com.springcloudalibaba.user.openFeign=debug

6 负载均衡算法

Ribbon的负载均衡都是实现了IRule接口,如下图所示。

主要有7种负载均衡策略:

RoundRobinRule: 默认轮询的方式。

RandomRule: 随机方式。

WeightedResponseTimeRule: 根据响应时间来分配权重的方式,响应的越快,分配的值越大。

BestAvailableRule: 选择并发量最小的方式。

RetryRule: 在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server。

ZoneAvoidanceRule: 根据性能和可用性来选择。

AvailabilityFilteringRule: 过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)。

修改负载均衡策略:

修改负载均衡策略有两种,一种是配置类,需要在代码中写配置类设置负载均衡算法。第二种是在配置文件中修改,本文只介绍配置文件修改负载均衡算法。

#将调用服务名为payService的服务的负载均衡策略改为随机策略
payService.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

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

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

相关文章

给定两个数组x和hp,长度都是N。 x数组一定是有序的,x[i]表示i号怪兽在x轴上的位置 hp数组不要求有序,hp[i]表示i号怪兽的血量

题目描述 给定两个数组x和hp&#xff0c;长度都是N。 x数组一定是有序的&#xff0c;x[i]表示i号怪兽在x轴上的位置 hp数组不要求有序&#xff0c;hp[i]表示i号怪兽的血量 为了方便起见&#xff0c;可以认为x数组和hp数组中没有负数。 再给定一个正数range&#xff0c;表示如果…

Vue 快速入门(二)

1、Vue浏览器插件安装 安装地址 https://devtools.vuejs.org/guide/installation.html下载完后&#xff0c;直接将vuejs-devtools.crx文件拖到Chrome浏览器扩展程序中去即可。如图&#xff1a; 2.安装完成后&#xff0c;试试效果&#xff0c;我们打开之前写的hello.html页面看…

32.Isaac教程--操纵运动规划

操纵运动规划 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html Isaac SDK 为机械臂的运动规划提供了以下组件&#xff1a; EndEffectorGlobalPlanner&#xff1a;使用逆运动学将末端执行器的笛卡尔目标转换为关节角度目标。 此小码可以接收笛卡尔…

云原生技能树-容器镜像制作、发布、拉取和运行

创建仓库 请在你自己的 gitcode.net 上创建一个仓库&#xff0c;命名为cloud_native_hello_py&#xff0c;目录结构如下&#xff1a; . ├── .dockerignore ├── .gitignore ├── Dockerfile ├── README.md └── src├── main.py└── requirements.txt其中 ma…

avb校验相关与块校验原理

一、启动校验流程 edk2/QcomModulePkg/Library/avb/VerifiedBoot.c DEBUG ((EFI_D_ERROR, "LoadImageAndAuth failed %r\n", Status)); in LoadImageAndAuth()edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.c DEBUG ((EFI_D_ERROR, "LoadImageAndAu…

docker部署redis后,修改配置文件的requirepass后无效

解决方案 执行docker run命令时不要使用参数–requirepass docker部署redis流程&#xff08;问题复现&#xff09; 1. 启动redis容器 在服务器docker运行时&#xff0c;执行下列命令。&#xff08;会自动在远程仓库下载镜像&#xff09; redis: docker run \ --restartalw…

高等数学【合集】

文章目录极限计算求导计算极限计算 第一步:先看x→value确定类型第一步:先看x \rightarrow value确定类型第一步:先看x→value确定类型 7种未定型:∞∞,00,1∞,0∞,∞0,00,∞−∞7种未定型: \frac{\infty}{\infty},\frac{0}{0},1^{\infty},0^{\infty},\infty^0,0^0,\infty-\inf…

win10开机后桌面无图标问题解决办法

本篇文章主要讲解win10下桌面无图标的问题解决办法。 日期&#xff1a;2023年1月21日 作者&#xff1a;任聪聪 主要原因&#xff1a; 这个问题的原因是资源管理器或者注册表中有垃圾注册数据导致&#xff0c;实际上和显卡没有任何关系&#xff0c;但有些情况是由于驱动问题导致…

OSPF 特殊区域介绍、Stub、Totally Stub、NSSA、Totally NSSA

1.1.0 路由 OSPF 特殊区域介绍、Stub、Totally Stub、NSSA、Totally NSSA 特殊区域的产生和注意事项 产生&#xff1a;OSPF通过划分区域减小网络内路由器的LSDB的规模。对于那些位于AS边界的非骨干区域如果该设备是较为低端的路由器&#xff0c;则无法承受过多的路由条目。为此…

前端学习第一阶段:1-4章

学习总结&#xff1a;前四章学习总体来说不太难理解&#xff0c;如果时间宽裕&#xff0c;一天之内可以学完。 第一章 前端就业班课程导学 第二章 HTML5 CSS3课前导学 第三章 VSCode编辑器的使用 第四章 HTML 4-1 HTML初识 List item 01-基础班学习路线 List item 02-HTML简…

【Linux_】环境变量

【Linux_】环境变量 心有所向&#xff0c;日复一日&#xff0c;必有精进专栏&#xff1a;《Linux_》作者&#xff1a;沂沐沐目录 【Linux_】环境变量 什么是环境变量 常见变量 查看环境变量方法 环境变量相关的命令 通过系统调用获取或设置环境变量 环境变量通常是具有全…

代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

文章目录LeetCode 236. 二叉树的最近公共祖先题目讲解思路LeetCode 701.二叉搜索树中的插入操作题目讲解思路LeetCode 450.删除二叉搜索树中的节点题目讲解思路示图总结既然还是要生活&#xff0c;那么就学会主宰生活LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 求最小…

【数据结构与算法】详解二叉树以及模拟实现二叉树

文章目录前言:1.二叉树的定义2.二叉树的相关术语3.二叉树的性质4.特殊的二叉树5.二叉树的遍历前序遍历中序遍历后序遍历层序遍历6.获取树中节点的个数方法1:遍历思想方法2:子问题的思想7.获取叶子节点的个数方法1:遍历思想方法2:子问题的思想8.获取第K层节点的个数9.获取二叉树…

链表(LinkedList)

链表(LinkedList) 链表是有序的列表&#xff0c;但是其在内存的存储不一定连续 由这张图我们可以看出 链表是以节点的方式来存储的&#xff0c;是链式存储 每个节点包含data域&#xff0c;next域&#xff1a;指向下一个节点 我们可以发现链表的各个节点不一定是连续存储的 …

再见了HDMI Alt

点击上方“LiveVideoStack”关注我们▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息编者按&#xff1a;其实在未能推出配套线缆和适配器的那一刻&#xff0c;HDMI Alt模式就已经没有未来了。HDMI已全面落后DisplayPort。本文来自Arstechnica。文/Scharon Hardin…

【SpringCloud】Nacos的安装与启动

【SpringCloud】Nacos的安装与启动 一、下载安装包 二、解压 三、端口配置 四、启动 五、访问 【SpringCloud】Nacos的安装与启动 一、下载安装包 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a; GitHu…

分享149个PHP源码,总有一款适合您

PHP源码 分享149个PHP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 149个PHP源码下载链接&#xff1a;https://pan.baidu.com/s/1RKnEbbhpfUndnMrxG8rSIQ?pwd0nqp 提取码&#x…

LINUX学习之文本编辑器VIM/VI(八)

简介 VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器 VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计 VIM 与 VI 编辑器完全兼容 模式转换 如下图所示&#xff0c;一般模式下输入i、…

选出相似的文本按照相似度排序difflib.get_close_matches

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 选出相似的文本 按照相似度排序 difflib.get_close_matches 选择题 对于以下python代码表述错误的是? from difflib import get_close_matches myText"python" myList[&…

23种设计模式(十六)——备忘录模式【状态变化】

备忘录模式 文章目录 备忘录模式意图什么时候使用备忘录真实世界类比备忘录模式的实现备忘录模式的优缺点亦称:调解人、控制器、Intermediary、Controller、Mediator 意图 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将这个对…