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 closedVerificaçã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
- Políticas de nova tentativa
- Padrão disjuntor
- Políticas de tempo limite e alternativa
- Pipelines de resiliência