Pular para o conteúdo

Retry, replay e desativação automática

Uma entrega que falha é tentada de novo sozinha, pelo cronograma, por cerca de 45 horas. Esta página é sobre o que você pode fazer além disso.

O retry coloca uma Entrega de volta na fila, para o mesmo endpoint e com o mesmo corpo.

Janela do terminal
curl -X POST https://api.notyfacil.com.br/v1/deliveries/dlv_01JB8Y3K7QF2V9D5WZ0XH4M1RC/retry \
-H "Authorization: Bearer $NOTYFACIL_KEY"

Use quando o receptor estava fora do ar e voltou, e você não quer esperar a próxima tentativa do cronograma, ou quando o cronograma já esgotou.

Situação da Entrega Retry
exhausted Volta para a fila.
retrying Adianta a próxima tentativa para agora.
cancelled Volta para a fila, se o endpoint estiver ativo.
pending ou processing 409: já está na fila.
delivered 409: já foi entregue. Para mandar de novo, use o replay.

Com o endpoint desativado, o retry responde 422: religue o endpoint antes.

O replay cria Entregas novas para todos os endpoints inscritos no tipo agora.

Janela do terminal
curl -X POST https://api.notyfacil.com.br/v1/events/evt_01JB8XZQ4T9M2NKPWV3RYCF7HD/replay \
-H "Authorization: Bearer $NOTYFACIL_KEY"
{ "event": "evt_01JB8XZQ4T9M2NKPWV3RYCF7HD", "deliveries": 3 }

Use quando o fato precisa chegar de novo a todos (um receptor perdeu dados e pediu para reprocessar), ou quando um endpoint cadastrado depois do evento precisa recebê-lo.

As Entregas antigas ficam como estão, e cada Entrega do replay conta como entrega nova no uso do plano.

A pergunta A ação
Uma entrega para um endpoint falhou e o endpoint voltou Retry
O cronograma esgotou para um endpoint Retry
Um endpoint novo precisa de um evento antigo Replay
Todos os receptores precisam do evento de novo Replay

Um endpoint que acumula 20 falhas seguidas, somando todas as entregas para ele, é desativado. A contagem é do endpoint, não da entrega: 20 eventos diferentes falhando uma vez cada desativam igual. Uma resposta 2xx no meio do caminho zera a contagem.

Quando isso acontece:

  • o endpoint passa a DisabledAutomatically e deixa de receber;
  • as Entregas que estavam na fila para ele são canceladas quando chega a vez delas;
  • quem cadastrou o endpoint recebe e-mail.

É proteção dos dois lados. O receptor fora do ar para de receber tráfego que não consegue atender, e as entregas param de gastar tentativas contra uma URL morta. Se continuassem, essas tentativas esgotariam o cronograma de eventos que chegariam bem se o receptor estivesse de pé.

Depois que o receptor voltar, religue o endpoint:

Janela do terminal
curl -X PATCH https://api.notyfacil.com.br/v1/endpoints/ep_01JB8Y1D6TQ4X8N2VK5HWZ3RFM \
-H "Authorization: Bearer $NOTYFACIL_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"enabled"}'

Religar zera a contagem de falhas seguidas, e o endpoint volta a receber os eventos publicados daqui para a frente. O que ficou para trás não volta sozinho: as Entregas canceladas ou esgotadas enquanto ele esteve desligado continuam como estão, e cada uma pode ser reenviada com retry. Para mandar um evento inteiro de novo, use o replay.

Confira antes com um teste do endpoint. Religar um receptor que ainda falha só leva a mais 20 falhas e a uma nova desativação.

O mesmo PATCH com "status":"disabled" desliga o endpoint à mão, para quando você sabe que o receptor vai ficar fora do ar. Ele passa a DisabledManually, as Entregas na fila para ele são canceladas quando chega a vez delas, e ele só volta quando alguém o religar.

Referência: reenviar uma entrega · refazer o fan-out de um evento