一、用处
想象一下,你正在玩一款在线游戏,突然间,游戏服务器开始不稳定,频繁出现延迟或者直接连接失败。这时候,如果你的游戏客户端还一直尝试连接服务器,不仅会浪费资源(比如电量、网络流量),而且可能会导致客户端程序卡死,甚至崩溃。
在软件系统中,服务之间经常互相调用,就像游戏客户端调用服务器一样。当被调用的服务出现问题时(比如响应慢、挂掉),调用者会等待响应,如果大量请求堆积,整个系统可能会陷入瘫痪,就像电网中的过载会导致跳闸一样。
CircuitBreaker 断路器的作用就是防止这种“服务雪崩”。它的工作原理类似于家里的电路保险丝或断路器:
1. 闭合状态closed:正常情况下,断路器处于闭合状态,允许服务间的调用像往常一样进行。
2. 打开状态open:当检测到服务调用失败达到一定阈值(比如连续失败次数过多),断路器会切换到打开状态,阻止进一步的调用尝试。这样可以避免调用者在等待无响应服务时浪费资源,同时也防止了故障扩散。
3. 半开状态half-open:一段时间后,断路器会进入半开状态,允许少量请求通过,检查服务是否已经恢复。如果服务恢复正常,断路器会回到闭合状态;如果服务仍然有问题,断路器会再次打开。
二、使用
在微服务架构中,CircuitBreaker(服务熔断)、服务降级、Bulkhead(隔离)和RateLimiter(限流)都是用于增强系统稳定性和响应能力的关键技术。下面我将逐一介绍它们的使用步骤:
CircuitBreaker(服务熔断)
- 使用步骤:
1. 引入依赖:
<!--resilience4j-circuitbreaker 熔断策略-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</depende