千家信息网

如何分析Spring Cloud Ribbon、Spring Cloud Feign以及断路器

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,如何分析Spring Cloud Ribbon、Spring Cloud Feign以及断路器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问
千家信息网最后更新 2025年12月02日如何分析Spring Cloud Ribbon、Spring Cloud Feign以及断路器

如何分析Spring Cloud Ribbon、Spring Cloud Feign以及断路器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1.spring-cloud 基于 spring-boot ,spring-boot跟传统的spring项目的区别的就是精简配置 '搭建的框架'更轻便,上手更快

2.spring-cloud跟传统项目的区别是 前者是分布式 后者是单体架构 ,分布式 即每个子项目都独立开 服务与服务间 有些服务支持给多个其他的服务调用 【相当于简约了重复代码】,当然这个分布式中需要两个重要的服务

2.1、网关服务 (相当于'分发'给不同的路由) 2.2认证服务 (有限私密的后端请求是需要权限 可能是登录权限 也可能是角色权限)

3.服务注册与发现:注册中心一般常用eruke,然后就是服务提供者 和服务消费者

eruke【高可用服务注册中心】:1.可以有多个注册中心 2.多个注册中心可以相互注册 3.其中一个注册中心挂了,其他的还可以提供服务

4.服务消费者:一般用Ribbon 和 Feign

1. Spring Cloud Ribbon

1.1 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。

1.2 重试机制

1.3饥饿加载(eager-load)模式

2. Spring Cloud Feign

2.1. Ribbon是一个基于HTTP和TCP客户端的负载均衡器。 Feign 中也使用Ribbon。

2.2 .Spring Cloud Feign是一套基于 Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。我们只需要通过创建接口并用注解来配置它既可完成对Web服务接口的绑定。它具备可插拔的注解支持,包括Feign注解、JAX-RS注解。它也支持可插拔的编码器和解码器。Spring Cloud Feign还扩展了对Spring MVC注解的支持,同时还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。

3.服务容错保护(Hystrix服务降级、 依赖隔离、 断路器 )

服务降级 : 在为具体执行逻辑的函数上增加 @HystrixCommand 注解来指定服务降级方法,这个注解上有这个服务掉不通会掉哪个服务的标识。

依赖隔离 : 如果新服务接入后运行不稳定或存在问题,完全不会影响到应用其他的请求。

断路器 : 在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),直接切断原来的主逻辑调用。

3.1 Hystrix降级逻辑中如何获取触发的异常

** Hystrix两种不同** 获取触发的异常 的方式

上面的实现同上一节注解方式的实现一样,在使用继承方式的时候通过 getFailedExecutionException 方法就可以获取到触发降级的异常信息了。

3.2 不使用Hystrix

3.3 使用 Hystrix 解决内部调用抛出异常问题

该类中该方法为发生异常的回调方法,由此可以看出如果抛出异常如果是 HystrixBadRequestException 是直接处理异常之后进行抛出(这里不会触发熔断机制),而不是进入回调方法

3.4 请求合并

通常微服务架构中的依赖通过远程调用实现,而远程调用中最常见的问题就是通信消耗与连接数占用。在高并发的情况之下,因通信次数的增加,总的通信时间消耗将会变的不那么理想。同时,因为对依赖服务的线程池资源有限,将出现排队等待与响应延迟的情况。为了优化这两个问题,Hystrix提供了HystrixCollapser来实现请求的合并,以减少通信消耗和线程数的占用。

解决方案

** 方式一 继承重写方法、**

在上面的构造函数中,我们为请求合并器设置了时间延迟属性,合并器会在该时间窗内收集获取单个User的请求并在时间窗结束时进行合并组装成单个批量请求。下面 getRequestArgument 方法返回给定的单个请求参数userId,而 createCommand 和 mapResponseToRequests 是请求合并器的两个核心:

  • createCommand :该方法的 collapsedRequests 参数中保存了延迟时间窗中收集到的所有获取单个User的请求。通过获取这些请求的参数来组织上面我们准备的批量请求命令

    UserBatchCommand 实例。

  • mapResponseToRequests :在批量命令 UserBatchCommand 实例被触发执行完成之后,该方法开始执行,其中 batchResponse 参数保存了 createCommand 中组织的批量请求命令的返回结果,而 collapsedRequests 参数则代表了每个被合并的请求。在这里我们通过遍历批量结果 batchResponse 对象,为 collapsedRequests 中每个合并前的单个请求设置返回结果,以此完成批量结果到单个请求结果的转换。

** 方式二【** 使用注解实现请求合并器 】、

这里使用 @HystrixProperty(name="timerDelayInMilliseconds", value = "100") 将合并时间窗设置为100毫秒

注意: 请求命令本身的延迟。如果依赖服务的请求命令本身是一个高延迟的命令,那么可以使用请求合并器.

看完上述内容,你们掌握如何分析Spring Cloud Ribbon、Spring Cloud Feign以及断路器的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

服务 方法 注解 客户 断路器 单个 命令 客户端 时间 问题 均衡 参数 方式 结果 延迟 分布式 支持 通信 多个 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 辽宁网络技术服务案例 贵阳龙芯服务器报价 网络安全委员职能 mc服务器 死亡不掉落 怎么维护网络安全告诉同学们 西安微梦创科网络技术 如何衡量数据库字段离散程度 鸿蒙软件开发计算器 方舟手游删除后服务器存档在哪 临床路径数据库 网约车系统软件开发 河北网络技术咨询职责 聊城手机软件开发哪家便宜 学生课程数据库er图是什么 服务器系统 比较安全吗 大学的软件开发专业好 SPSS利用数据库导入数据 上海可视化智慧社区软件开发 新兴的数据库技术 图片上传可以在数据库查到吗 网络技术成绩什么时候出 社交软件开发难点 提高计算机网络技术防止网络入侵 人工智能专业毕业做软件开发 计算机3级网络技术运行环境 九江美乐家网络技术有限公司 网络安全方向MacBook 网络安全进国家哪个部门 济南电脑软件开发机构 网络安全需要注意的地方
0