0Pricing
C# Academy · Aula

Padrão disjuntor

Pare temporariamente de chamar serviços que estão falhando.

Padrão disjuntor é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

O Problema que as Novas Tentativas Não Resolvem

Se uma dependência estiver realmente indisponível, repetir cada requisição apenas aumentará a carga e deixará seu próprio aplicativo mais lento. O padrão de disjuntor de circuito detecta falhas persistentes e interrompe as chamadas ao serviço com falha por algum tempo.

Uma Analogia com a Eletrônica

Assim como um disjuntor elétrico que desarma para proteger um circuito, esse padrão "abre" depois de muitas falhas e, em seguida, testa automaticamente se a dependência se recuperou.

Os Três Estados

Um disjuntor de circuito tem três estados: Fechado (as chamadas fluem normalmente), Aberto (as chamadas são bloqueadas imediatamente) e Semiaberto (uma chamada de teste verifica a recuperação).

Estado Fechado

No estado Fechado, as requisições passam e o Polly acompanha a taxa de falhas. Se as falhas excederem o limite durante a janela de amostragem, o disjuntor passará para o estado Aberto.

Estado Aberto

No estado Aberto, o Polly interrompe a chamada: lança imediatamente uma BrokenCircuitException sem chamar a dependência, dando a ela espaço para se recuperar e fazendo as chamadas falharem rapidamente.

try
{
    await pipeline.ExecuteAsync(token => CallServiceAsync(token));
}
catch (BrokenCircuitException)
{
    // circuit is open, fail fast
}

Estado Semiaberto

Depois que transcorrer a duração da interrupção, o disjuntor entra no estado Semiaberto e permite uma requisição de teste. Se ela for bem-sucedida, o circuito será fechado; se falhar, será reaberto por outro período de interrupção.

Configurar o Disjuntor

O Polly v8 usa CircuitBreakerStrategyOptions. As principais configurações são: FailureRatio (por exemplo, 0.5 = 50%), MinimumThroughput, SamplingDuration e 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 e MinimumThroughput

FailureRatio é a proporção de falhas que aciona o disjuntor. MinimumThroughput garante que o disjuntor só seja acionado depois de um número suficiente de chamadas, para que uma única falha inicial não o abra prematuramente.

Reagir a Mudanças de Estado

Use os retornos de chamada OnOpened, OnClosed e OnHalfOpened para registrar transições ou emitir alertas quando uma dependência apresentar problemas.

new CircuitBreakerStrategyOptions
{
    FailureRatio = 0.5,
    OnOpened = args =>
    {
        Console.WriteLine($"Circuit opened for {args.BreakDuration}");
        return default;
    }
};

Combinar com Novas Tentativas

As novas tentativas e o disjuntor de circuito se complementam: as novas tentativas lidam com breves instabilidades, enquanto o disjuntor interrompe as novas tentativas quando a falha persiste. A ordem é importante, como veremos novamente na lição sobre fluxos.

Controle Manual

Você pode manter um CircuitBreakerManualControl para isolar (forçar a abertura) ou fechar o disjuntor manualmente, o que é útil durante janelas de manutenção.

var manualControl = new CircuitBreakerManualControl();
await manualControl.IsolateAsync(); // force open
await manualControl.CloseAsync();   // force closed

Verificação Rápida

Teste o padrão de disjuntor de circuito.

Recapitulação

O disjuntor de circuito protege dependências com dificuldades alternando entre os estados Fechado, Aberto e Semiaberto. No Polly v8, AddCircuitBreaker com FailureRatio, MinimumThroughput, SamplingDuration e BreakDuration controla o acionamento. O estado Aberto lança BrokenCircuitException para fazer as chamadas falharem rapidamente, e os retornos de chamada junto com o controle manual permitem observar e substituir o estado.

Perguntas Frequentes

A aula “Padrão disjuntor” é grátis?

Sim — o texto completo de “Padrão disjuntor” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Padrão disjuntor”?

Pare temporariamente de chamar serviços que estão falhando. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Padrão disjuntor”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Políticas de nova tentativa
  2. Padrão disjuntor
  3. Políticas de tempo limite e alternativa
  4. Pipelines de resiliência
← Voltar para C# Academy