---
updatedAt: 2025-09-29T22:33:49.000Z
agentTools:
  projectIndex: https://docs.bankly.com.br/llms.txt
---

# Circuit Breaker

<span class="bkly-guide-small-stable-tag">stable</span>

Em cenários ideais, assim que um evento ocorre, uma mensagem é gerada e disparada ao parceiro via *webhook* (desde que o parceiro tenha realizado as [configurações dos *webhooks*](https://docs.bankly.com.br/docs/configuracao-webhooks)).

Contudo, se o *endpoint* do parceiro se encontrar indisponível ou apresentar lentidão, é preciso utilizar o *endpoint* de reprocessamento de mensagens para recuperar todas as notificações que não foram entregues no período de falha.

Para que o sistema do parceiro não seja impactado nesses casos, o Bankly desenvolveu o **Circuit Breaker**.

O Circuit Breaker é um fluxo que identifica esses cenários e retém as mensagens que não puderam ser entregues para que elas sejam enviadas assim que o sistema do parceiro retornar à normalidade, sem a necessidade de reprocessamento de mensagens.

## Como o Circuit Breaker funciona

O Circuit Breaker possui uma política de *timeout* de **dez segundos** e apresenta os estados descritos a seguir.

### Estado aberto

Se o *endpoint* do parceiro apresentar falhas ou demorar mais de dez segundos para responder após o envio de cinco mensagens consecutivas via *webhook*, o Circuit Breaker entrará no estado **aberto**.

Nesse estado, nenhuma mensagem será disparada para esse *endpoint* por dez segundos, e os *payloads* das mensagens que haviam sido enviadas ficarão retidos.

![](https://files.readme.io/a3399dc-Diagramas_Circuit_Breaker_-_aberto.jpg "Diagramas Circuit Breaker - aberto.jpg")

### Estado semiaberto

Após dez segundos sem disparo de mensagens para o *endpoint* do parceiro, o Circuit Breaker passará para o estado **semiaberto**.

Esse é um estado intermediário, no qual as mensagens ficam retidas até que um novo evento dispare uma nova mensagem para o *endpoint* do parceiro.

O diagrama a seguir demonstra a tentativa de envio de mensagem de um novo evento com resultado negativo. O *endpoint* do parceiro ainda apresenta indisponibilidade ou lentidão e essa mensagem ficará retida no Circuit Breaker junto com as anteriores por mais dez segundos.

Nesse caso, o estado do Circuit Breaker será alterado novamente para **aberto**, repetindo o ciclo descrito anteriormente.

![](https://files.readme.io/501d64d-Diagramas_Circuit_Breaker-semiaberto-negativo.jpg "Diagramas Circuit Breaker-semiaberto-negativo.jpg")

Já o diagrama abaixo demonstra a tentativa de envio de mensagem de um novo evento com resultado positivo, pois o *endpoint* do parceiro já retornou à normalidade.

Nesse caso, o estado do Circuit Breaker será alterado para **fechado**.

![](https://files.readme.io/a1cb037-Diagramas_Circuit_Breaker-semiaberto-positivo.jpg "Diagramas Circuit Breaker-semiaberto-positivo.jpg")

### Estado fechado

Se o *endpoint* responder a essa nova mensagem enviada via *webhook* com sucesso sem exceder o tempo limite (dez segundos) e nem falhar apresentando um código de *status* de erro interno no servidor, o estado do Circuit Breaker será alterado para **fechado**.

Então, as mensagens de eventos serão enviadas novamente via *webhook* seguindo seu fluxo normal e todas aquelas que estavam sendo retidas serão disparadas automaticamente para o *endpoint* do parceiro, sem a necessidade de fazer um reprocessamento.

![](https://files.readme.io/cadfa60-Diagramas_Circuit_Breaker_-_fechado.jpg "Diagramas Circuit Breaker - fechado.jpg")