推荐学习!拆解Spring Cloud 4大核心组件,彻底搞懂工作原理(断路器Resilience4J)

文摘   2024-11-22 19:00   新疆  

最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)以及 合集全部源码

环境:SpringBoot3.3.5 + Spring Cloud2023.0.3



1. 简介

断路器是微服务架构中的一种关键组件,它主要用于处理服务之间的依赖关系和故障处理,提高系统的弹性和可用性。断路器模式源于电力系统中用于保护线路过载的装置,当某个服务单元发生故障时,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待,从而防止故障在分布式系统中的蔓延。

在Spring Cloud中,断路器通常使用Hystrix或Resilience4j等库来实现。这些库能够监控服务调用的情况,当调用失败的次数达到一定阈值时,断路器会自动打开,拒绝所有对该服务的请求,避免进一步的失败。同时,它们还提供了降级服务,如返回预设的默认值或错误信息,确保系统的基本功能可用。

本篇文章将详细介绍Resilience4j断路器的应用及工作原理。在之前的文章关于Resilience4j的使用已经做过详细的介绍,如果你还没有用过或者没有全面的了解使用方式,那么你可以查看下面这篇文章

保障系统稳定,提升接口安全性

这篇文章详细介绍了Resilience4j 4大核心功能(熔断,限时,隔离,限流)的应用。接下来的内容,我们将介绍这4大核心功能的实现原理。

2. 工作原理

2.1 熔断

通常我们都会通过注解的方式实现熔断功能,如下示例:

首先,我们会在配置文件中配置熔断策略,如下:


resilience4j: circuitbreaker:    # 该节点用来进行通过的配置,之后我们可以在instances中引用 configs:      cnf:       failure-rate-threshold: 60        ... instances: # 所有熔断器的默认配置 cnf: # 这里我们直接引用上面的配置       base-config: cnf akf: #以百分比配置失败率阈值。当失败率等于或大于阈值时,断路器状态并关闭变为开启,并进行服务降级。 failure-rate-threshold: 60 #配置滑动窗口的类型,当断路器关闭时,将调用的结果记录在滑动窗口中。滑动窗口的类型可以是count-based或time-based。如果滑动窗口类型是COUNT_BASED,将会统计记录最近slidingWindowSize次调用的结果。如果是TIME_BASED,将会统计记录最近slidingWindowSize秒的调用结果。 sliding-window-type: count-based #配置滑动窗口的大小。 sliding-window-size: 3 #如果minimumNumberOfCalls为10,则必须至少记录10个调用,然后才能计算失败率。如果只记录了9次调用,即使所有9次调用都失败,断路器也不会开启。 minimum-number-of-calls: 3 #断路器从开启过渡到半开应等待的时间。        wait-duration-in-open-state10000

接着是在代码中在需要熔断的方法上添加注解,如下:

@CircuitBreaker(name = "akf")public Object query(Long id) {  if (id == 6) {    throw new RuntimeException("非法数字") ;  }  return "查询 - " + id ;}

如上配置,运行结果如下:

[第一次]  java.lang.RuntimeException: 非法数字[第二次]  java.lang.RuntimeException: 非法数字[第三次]  java.lang.RuntimeException: 非法数字// 在接下来的10s都会是下面的异常 [第N次]  CallNotPermittedException: CircuitBreaker 'akf' is OPEN and does not permit further calls

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章