断路器模式
暂时停止调用持续失败的服务。
断路器模式 是 CoddyKit 上的免费 C# Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。
重试无法解决的问题
如果依赖项确实已停止运行,重试每个请求只会不断增加负载,并拖慢您自己的应用。熔断器模式可以检测持续的故障,并在一段时间内停止调用发生故障的服务。
借鉴电子电路
这种模式类似于用于保护电路的电气断路器:在故障次数过多后会“跳闸并断开”,然后自动测试依赖项是否已经恢复。
三个状态
熔断器有三种状态:闭合(调用正常通过)、打开(调用会立即被阻止)和半开(通过一次试探性调用测试恢复情况)。
闭合状态
在闭合状态下,请求可以通过,Polly 会跟踪故障率。如果在采样窗口内故障超过阈值,熔断器就会转换为打开状态。
打开状态
在打开状态下,Polly 会直接短路:不调用依赖项就立即抛出 BrokenCircuitException,从而给依赖项留出恢复空间,同时让调用方快速失败。
try
{
await pipeline.ExecuteAsync(token => CallServiceAsync(token));
}
catch (BrokenCircuitException)
{
// circuit is open, fail fast
}半开状态
断开持续时间结束后,熔断器会进入半开状态,并允许一个试探性请求。请求成功会闭合电路;请求失败则会再次打开电路,进入下一段断开周期。
配置熔断器
Polly v8 使用 CircuitBreakerStrategyOptions。主要设置包括:FailureRatio(例如 0.5 = 50%)、MinimumThroughput、SamplingDuration 和 BreakDuration。
using Polly.CircuitBreaker;
var pipeline = new ResiliencePipelineBuilder()
.AddCircuitBreaker(new CircuitBreakerStrategyOptions
{
FailureRatio = 0.5,
MinimumThroughput = 10,
SamplingDuration = TimeSpan.FromSeconds(30),
BreakDuration = TimeSpan.FromSeconds(15)
})
.Build();FailureRatio 与 MinimumThroughput
FailureRatio 是触发熔断器的故障比例。MinimumThroughput 可确保只有在调用次数达到一定数量后才触发熔断器,因此一次过早发生的故障不会使其过早打开。
响应状态变化
使用 OnOpened、OnClosed 和 OnHalfOpened 回调,在依赖项性能下降时记录状态转换或发出警报。
new CircuitBreakerStrategyOptions
{
FailureRatio = 0.5,
OnOpened = args =>
{
Console.WriteLine($"Circuit opened for {args.BreakDuration}");
return default;
}
};与重试结合使用
重试和熔断器可以相互补充:重试处理短暂波动,熔断器则会在故障持续时停止重试。顺序很重要,我们会在管道课程中再次讨论这一点。
手动控制
您可以持有 CircuitBreakerManualControl,以便手动隔离(强制打开)或闭合熔断器,这对维护窗口很有用。
var manualControl = new CircuitBreakerManualControl();
await manualControl.IsolateAsync(); // force open
await manualControl.CloseAsync(); // force closed快速检查
测试熔断器模式。
回顾
熔断器通过在闭合、打开和半开状态之间切换,保护承受压力的依赖项。在 Polly v8 中,AddCircuitBreaker 配合 FailureRatio、MinimumThroughput、SamplingDuration 和 BreakDuration 控制熔断触发。打开状态会抛出 BrokenCircuitException,以便快速失败;回调和手动控制则让您能够观察并覆盖状态。
常见问题解答
「断路器模式」课时是免费的吗?
是的 — 「断路器模式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。
「断路器模式」这节课中我会学到什么?
暂时停止调用持续失败的服务。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C# Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「断路器模式」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C# Academy 课中编写并运行代码吗?
能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。