0Pricing
C# Academy · 课时

断路器模式

暂时停止调用持续失败的服务。

断路器模式 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 重试策略
  2. 断路器模式
  3. 超时与备用策略
  4. 弹性管道
← 返回 C# Academy