SpringCloud Alibaba——Sentinel服务熔断与限流(五、服务熔断)

简介: SpringCloud Alibaba——Sentinel服务熔断与限流(五、服务熔断)

1.开篇



前面那四篇文章,基本上都是在聊sentinel中有关限流降级的内容,现在该聊聊sentinel中的服务熔断了。

内容大致就是 @SentinelResource 注解中的fallback属性,同时分别整合RibbonOpenFeign

2.项目源码


github源码地址:https://github.com/2656307671/SpringCloud-Alibaba-Sentinel

gitee源码地址:https://gitee.com/szh-forever-young/SpringCloud-Alibaba-Sentinel

下面的测试对应了git仓库中的9003900484这三个微服务模块。前提是nacos启动成功、sentinel启动成功。先对90039004中的请求 /paymentSQL/{id} 进行一次访问。可以正常拿到数据,说明微服务提供者启动成功。


2.1 Sentinel + Ribbon


测试完90039004之后,我们启动84微服务消费者模块,因为nacos默认集成了ribbon,所以这里访问 /consumer/fallback/{id} 自然是一次9003、一次9004,已经实现了负载均衡。


2.1.1 只配置fallback

下面来说服务熔断,就要通过 @SentinelResource 注解中的fallback属性来配置。如果我们什么都不配,注解中只写一个标注服务熔断的唯一名称value属性,那么此时如果出错,反馈给用户的将会是error page,看上去很不友好。

所以这里在 @SentinelResource 注解中进行fallback属性的配置,详情参考仓库代码。配置了fallback之后再访问,由于id=45这两个值我没有添加,所以访问必然出错,但我们配置了fallback属性,此时出错就会走fallback对应的兜底方法。


2.1.2 只配置blockHandler


上面的案例只配置了fallback,可以看到出错之后会走fallback中定义的兜底方法。

下面演示只配置blockHandler的情况。当异常数达到两次之后,未来2秒的时间窗口内,将转向blockHandler中定义的降级限流方法。


2.1.3 fallbackblockHandler都配置

因为blockHandler负责的是在sentinel页面中的降级限流,所以我们这里先对fallback请求方法做一个配置。QPS > 1 则触发blockHandler的降级限流。


id=1,数据存在,正常情况下1s内访问1次,是可以拿到数据的。

下面这张图是我在1s内访问了多次,则满足配置 QPS > 1,触发blockHandler相关的降级限流方法。


id=4,数据不存在,访问之后直接会报 IllegalArgumentException 非法参数异常,而我们的@SentinelResource注解中的fallback属性可以来处理该异常信息,此时不再返回error page,而是返回fallback中定义的兜底方法。


上面的截图1s内只访问了1id=4这个请求,下面我1s内访问多次,此时满足 QPS > 1,直接触发blockHandler相关的降级限流方法。


根据fallbackblockHandler都配置的情况,我们可以得出结论:👇👇👇

·       fallback管理Java中的运行时异常信息,如果出现异常,则走fallback中定义的兜底方法。

·       blockHandler一般需要在sentinel中进行配置,只要你满足了QPS、异常数等这些配置信息,一定走blockHandler中定义的降级限流方法。

·       例如上面的案例,异常1s内出现1次,则走fallback1s内超过1次,则走blockHandler


2.2 Sentinel + OpenFeign


使用Sentinel集成OpenFeign了话,首先要做一些修改。


1.    因为nacos默认继承了ribbon,所以sentinel中可以直接使用ribbon,不用再添加ribbon依赖。但是openfeign不一样,需要pom中额外添加openfeign的依赖。

2.    yml配置文件中,激活sentinelopenfeign的支持。

3.    连接服务提供者的业务接口上需要添加 @FeignClient 注解等相关配置信息。

4.    主启动类上添加@EnableFeignClients 注解表示开启对OpenFeign的支持。


下面就做一个简单的测试了,需要启动84微服务消费者、9004微服务提供者。进行一次访问,可以拿到数据。


此时将9004微服务提供者停掉,再次访问,可以看到84微服务消费者进行了自动降级,也就是找不到微服务提供者9004,会去找连接服务提供者的业务接口,根据业务接口上的 @FeignClient 注解等相关配置信息,找到相应的接口实现类中的降级方法,进行自动降级。

相关文章
|
5月前
|
负载均衡 算法 Java
【SpringCloud(4)】OpenFeign客户端:OpenFeign服务绑定;调用服务接口;Feign和OpenFeign
Feign是一个WebService客户端。使用Feign能让编写WebService客户端更加简单。 它的使用方法是定义一个服务接口然后再上面添加注解。Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,十七支持了SpringMVC标准注解和HttpMessageConverters。 Feign可用于Eureka和Ribbon组合使用以支持负载均衡
800 138
|
存储 数据可视化 Java
基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪
Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。
789 2
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
348 1
|
监控 虚拟化 Docker
Sentinel监测到了服务,但是实时监控不显示曲线图,应该怎么解决这个问题?
在虚拟机(VMware,IP:192.168.175.100)中部署了Sentinel,使用Docker运行,端口映射为8858。服务的`application.properties`配置指向Sentinel仪表盘(192.168.175.100:8858),客户端IP为物理机IP(192.168.2.2)。然而,cart-service在Sentinel中显示失联且无曲线图,而sentinel-dashboard自身监控正常。
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
608 3
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
895 23
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
250 1
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel

热门文章

最新文章