如何分析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来设置服务端列表去轮询访问以达到均衡负载的作用。

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

1.2  重试机制

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

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

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

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

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

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

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客户端实现。

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

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

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

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

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

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

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

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

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

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

3.2  不使用Hystrix

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

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

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

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

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

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

3.4 请求合并

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

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

解决方案

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

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

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

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

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

    UserBatchCommand 实例。

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

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

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Nacos 中的参数有很多,如:命名空间、分组名、服务名、保护阈值、服务路由类型、临时实例等,那这些参数都是什么意思?又该如何设置?接下来我们一起来盘它。 1.命名空间 在 Nacos 中通过命名空间(Namespace)+ 分组(Group)+服务名(Name)可以定位到一个唯一的服务实例。 命名
Nacos 支持两种 HTTP 服务请求,一个是 REST Template,另一个是 Feign Client。之前的文章咱们介绍过 Rest Template 的调用方式,主要是通过 Ribbon(负载均衡) + RestTemplate 实现 HTTP 服务调用的,请求的核心代码是这样的: @
Nacos 是 Spring Cloud Alibaba 中一个重要的组成部分,它提供了两个重要的功能:服务注册与发现和统一的配置中心功能。 服务注册与发现功能解决了微服务集群中,调用者和服务提供者连接管理和请求转发的功能,让程序的开发者无需过多的关注服务提供者的稳定性和健康程度以及调用地址,因为这
Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录。而 Nacos 作为 Spring Cloud Alibaba 的核心组件之一,提供了两个非常重要的功能:服务注册中心(服务注册和发现)功能,和统一配置中心功能。 Nac
在 Nacos 的路由策略中有 3 个比较重要的内容:权重、保护阈值和就近访问。因为这 3 个内容都是彼此独立的,所以今天我们就单独拎出“保护阈值”来详细聊聊。 保护阈值 保护阈值(ProtectThreshold):为了防止因过多实例故障,导致所有流量全部流入剩余健康实例,继而造成流量压力将剩余健
前两天遇到了一个问题,Nacos 中的永久服务删除不了,折腾了一番,最后还是顺利解决了。以下是原因分析和解决方案,建议先收藏,以备不时之需。 临时实例和持久化实例是 Nacos 1.0.0 中新增了一个特性。临时实例和持久化实例最大的区别是健康检查的方式:临时实例使用客户端主动上报的健康检查模式,而
Spring Cloud Alibaba 技术体系中的 Nacos,提供了两个重要的功能:注册中心(服务注册与发现)功能和配置中心功能。 其中注册中心解决了微服务调用中,服务提供者和服务调用者的解耦,让程序开发者可以无需过多的关注服务提供者和调用者的运行细节,只需要通过 Nacos 的注册中心就可以
负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器。 服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足不同的消费者希望使用不同负载均衡策略的需求,而使用不同负载均衡策略的场景确实是存在的,所以客
本篇文章为大家展示了如何解决Spring Cloud 服务冲突问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、背景...
本篇内容主要讲解“spring cloud服务的注册与发现怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spri...
本篇内容介绍了“Dubbo怎么实现Spring Cloud服务治理 ”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处...
本篇内容主要讲解“SpringCloud相关面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringCloud相...
如何分析Spring Cloud Ribbon、Spring Cloud Feign以及断路器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希
这篇文章主要讲解了“springcloud微服务的组成部分有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“s...
这篇文章主要讲解了“SpringCloud的OpenFeign项目怎么创建”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习...
本篇内容主要讲解“spring cloud oauth3整合JWT后获取用户信息不全怎么办”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带...
怎样解析微服务架构SpringCloud,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。...
这篇文章主要介绍spring cloud中API网关的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、服务网关简介1、外观模式客户端...
本篇内容介绍了“Spring Cloud微服务的相关问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处...
本文小编为大家详细介绍“spring cloud config整合gitlab如何搭建分布式的配置中心”,内容详细,步骤清晰,细节处理妥当,希望这篇“spring cloud config整合gi...