JavaScriptMódulos e Errosavancado

Circuit breaker

Em sistemas distribuídos, uma chamada a um serviço externo pode falhar repetidamente. Sem um circuito de proteção, você corre o risco de sobrecarregar o recurso já instável com tentativas inúteis, piorando a situação. O padrão Circuit Breaker resolve isso: após um número definido de falhas consecutivas, ele "abre" o circuito e recusa imediatamente novas chamadas por um período, dando tempo para o serviço se recuperar. Dominar esse padrão é essencial para construir sistemas resilientes.

O PROBLEMA

Implemente Circuit Breaker: após N falhas, abre por X segundos.

EXEMPLO

const cb = criarCircuitBreaker(servico, {maxFalhas:3, timeoutMs:5000});
// após 3 falhas → 'Circuito aberto'

SOBRE O CONCEITO

O Circuit Breaker tem três estados: fechado (chamadas normais), aberto (chamadas recusadas) e semiaberto (tentativa de reabertura). Para implementá-lo sem loops, você usa uma estrutura de objeto para armazenar o contador de falhas (let falhas) e o timestamp da abertura (let abertoEm). Ao chamar a função, verifique primeiro se o circuito está aberto: se Date.now() - abertoEm for menor que o timeout, rejeite imediatamente com throw 'Circuito aberto'. Caso contrário, mova para semiaberto e tente executar o serviço. Se a chamada for bem-sucedida, reset o contador e feche o circuito; se falhar, incremente o contador e, se atingir maxFalhas, registre abertoEm = Date.now() e lance erro. O erro comum de não rastrear o tempo de abertura impede que o circuito saia do estado aberto, pois a condição de tempo nunca será satisfeita.

RESOLUÇÃO

Mais exercícios de Módulos e Erros

JSM003 · BásicoTipos de erroJSM005 · BásicoError propertiesJSM006 · BásicoExport nomeadoJSM008 · BásicoImport * as
Ver todos os exercícios de JavaScript