Agenda de retentativas webhook
Cinco retentativas exponenciais com base de 1000 esperam 1000, 2000, 4000, 8000 e 16000, num total de 31000: escolha o número de retentativas, o atraso base e a estratégia e receba a agenda completa com as esperas acumuladas. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Máximo de tentativas
- 5
- Atraso base
- 1.000
- Estratégia
- Exponential
- Atrasos
- 1.000, 2.000, 4.000, 8.000, 16.000
- Espera total
- 31.000
- Número de tentativas
- 5
backoff fixo, linear, exponencial
Por que vale a pena escrever o plano de retentativas
Quando uma notificação de eventos falha, o sistema que a envia espera e tenta de novo. Quem entrega essas notificações e quem as recebe precisa de uma lista explícita de esperas antes de cada retentativa, não de uma promessa vaga de que haverá backoff em algum ponto. Sem uma agenda publicada, a equipe de operação não consegue raciocinar sobre o pior atraso de entrega, e as simulações de carga não reproduzem os intervalos exatos que a produção vai inserir entre as tentativas. Esta ferramenta recebe um número máximo de retentativas, um atraso base maior que zero e uma estratégia, e devolve o atraso de cada tentativa, a espera acumulada e uma fórmula curta que você pode deixar ao lado de um painel ou no seu manual de operação.
Fixo, linear ou exponencial, e o erro comum
O backoff fixo mantém o mesmo atraso base em todas as tentativas: é fácil de entender e gentil com receptores que só precisam de uma pausa curta. O linear multiplica a base pelo número da tentativa, contando a partir de um, então as últimas tentativas esperam proporcionalmente mais sem crescer tão rápido quanto o exponencial. O exponencial dobra a cada vez: cinco retentativas a partir de 1000 dão 1000, 2000, 4000, 8000 e 16000, num total de 31000. O erro comum é um atraso base nulo ou negativo, que faria uma fila girar sem descanso; ele é recusado na hora. Mantenha todos os atrasos numa única unidade, normalmente milissegundos.
Perguntas frequentes
A agenda inclui jitter aleatório?
Aplique seu próprio jitter por cima se precisar de dispersão entre workers.
Quanto tempo se espera no total com cinco retentativas exponenciais?
Com atraso base de 1000, as esperas são 1000, 2000, 4000, 8000 e 16000, e a espera acumulada chega a 31000 antes da quinta tentativa. O resultado usa a mesma unidade que você escolheu, normalmente milissegundos.
Qual a diferença entre backoff fixo, linear e exponencial?
O fixo espera o mesmo atraso base antes de cada tentativa. O linear multiplica a base pelo número da tentativa, contando a partir de um. O exponencial dobra a espera a cada vez: a base vezes dois elevado ao número da tentativa menos um.
Que unidade o atraso base deve usar?
A que você preferir, desde que todos os atrasos usem a mesma; o comum são milissegundos. A base precisa ser maior que zero, porque uma espera nula ou negativa faria uma fila tentar de novo sem parar, então esses valores são recusados.
Quantas retentativas posso planejar?
De 1 a 100. Cada tentativa recebe exatamente um atraso antes de disparar, e a agenda mostra o número da tentativa, o seu atraso e a espera acumulada até ali, o que deixa claro o pior tempo de entrega.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/webhook-retry-schedule-build \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"max_retries":5,"base_delay":1000,"strategy":"exponential"}'const res = await fetch("https://api.kit.forhosting.com/dev/webhook-retry-schedule-build", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"max_retries": 5,
"base_delay": 1000,
"strategy": "exponential"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/webhook-retry-schedule-build",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"max_retries": 5,
"base_delay": 1000,
"strategy": "exponential"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/webhook-retry-schedule-build", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"max_retries":5,"base_delay":1000,"strategy":"exponential"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"max_retries":5,"base_delay":1000,"strategy":"exponential"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/webhook-retry-schedule-build", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"max_retries": 5,
"base_delay": 1000,
"strategy": "exponential"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.webhook_retry_schedule_build",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Receptores de webhook e workers de entrega precisam de uma lista explícita de tempos de espera antes de cada retentativa, não de uma promessa vaga de que o backoff será aplicado em algum ponto da pilha. Este montador de agenda de retentativas de entrega de webhook recebe um número máximo de retentativas, um atraso base estritamente positivo e uma estratégia fixa, linear ou exponencial, e devolve os atrasos por tentativa, as esperas acumuladas e uma fórmula curta que você pode fixar em testes ou exibir ao lado de um painel. A mesma lógica pura roda grátis no navegador e pela API, de modo que planejar uma escada exponencial de cinco retentativas offline coincide com o que o worker na borda usará ao configurar rotas de notificação ou loops de entrega próprios. Atrasos base inválidos falham de imediato com invalid_input em vez de inventar esperas nulas ou negativas que saturarariam uma fila.
O que é uma agenda de retentativas de webhook e como as três estratégias diferem
Sem uma agenda publicada, operadores não conseguem raciocinar sobre a latência de entrega no pior caso, e testes de carga não reproduzem os intervalos exatos que um worker de produção inserirá entre retentativas. O backoff fixo mantém o mesmo atraso base em cada tentativa: simples de entender e gentil com sistemas a jusante que só precisam de um breve resfriamento. O backoff linear multiplica o atraso base pelo índice da tentativa (base um), de modo que retentativas posteriores esperam proporcionalmente mais sem crescer tão rápido quanto a pura exponencial. Uma agenda de retentativas de entrega de webhook é a lista ordenada de atrasos que você espera antes da tentativa um, da dois e assim por diante após um POST falho na URL do assinante. Esta capacidade codifica três famílias comuns de backoff usadas em barramentos de mensagens e clientes HTTP. O backoff exponencial dobra o atraso anterior a cada vez usando base_delay vezes dois elevado a tentativa menos um, o padrão clássico para falhas de rede transitórias e limites de taxa. Você informa max_retries como quantas vagas de retentativa materializar, base_delay como semente positiva na unidade escolhida (em geral milissegundos) e strategy como fixed, linear ou exponential. A resposta ecoa essas entradas, lista os atrasos em ordem, soma-os como total_wait e expande um array schedule com número da tentativa, atraso e espera acumulada para que gráficos de UI e geradores de configuração não precisem de aritmética extra.
Contrato de entrada, formato da resposta e quando a validação falha
Envie por POST um corpo JSON com três campos obrigatórios. max_retries é um inteiro de um a cem que indica quantas retentativas agendar. base_delay é um número finito estritamente maior que zero em qualquer unidade coerente; zero e valores negativos são rejeitados porque uma espera não positiva ou faz busy-spin ou não faz sentido para o agendamento. strategy deve ser a string fixed, linear ou exponential (sem distinguir maiúsculas após o trim). Aliases como retries, base_ms e backoff são aceitos para que formatos de configuração existentes mapeiem de forma limpa. Campos ausentes, max_retries não inteiros, base_delay não finito e estratégias desconhecidas disparam invalid_input e não são cobrados. Em caso de sucesso o corpo inclui max_retries, base_delay, strategy, delays como array plano, total_wait como soma dos atrasos, attempt_count igual a max_retries, schedule como objetos com attempt, delay e cumulative, e formula reescrevendo a forma fechada da estratégia escolhida. Exemplo: max_retries cinco, base_delay mil, strategy exponential produz atrasos de mil, dois mil, quatro mil, oito mil e dezesseis mil com total_wait de trinta e um mil. Combine a agenda com sua própria política de jitter se precisar de dispersão aleatória; este endpoint omite de propósito o jitter e carimbos de relógio de parede para que os resultados permaneçam determinísticos entre navegador e API. O teto de max_retries é cem para que um erro de digitação não expanda um payload enorme nem estoure produtos intermediários em escadas exponenciais grandes.
Onde montar uma agenda de retentativas agrega valor em sistemas reais
Harnesses de teste de carga injetam o mesmo array de atrasos que o worker de produção usa, eliminando o clássico descompasso em que o staging retenta mais rápido que a produção e mascara bugs de limite de taxa. Plataformas de entrega que expõem ajustes de confiabilidade de webhooks podem chamar este montador quando um operador escolhe o máximo de retentativas e um modo de backoff, e então armazenar os atrasos resultantes ao lado do segredo do endpoint e da chave de assinatura. Runbooks de incidentes se beneficiam de um total_wait imprimível para que a equipe de plantão saiba quanto um assinante instável pode atrasar antes da última tentativa. Geradores OpenAPI e de SDK podem documentar escadas de exemplo concretas sem manter à mão tabelas que divergem do código em tempo de execução. Como a implementação é parse puro de nível A, cada chamada bem-sucedida custa o preço base publicado US$ 0,002 sem tokens de modelo nem rede de saída; validação falha não consome saldo. Mantenha base_delay e total_wait na mesma unidade das suas primitivas de sleep para nunca converter milissegundos em segundos por engano ao ligar a agenda em um loop de worker.
Casos de integração
Configurar backoff de entrega de webhook em um painel
Permita que operadores escolham o máximo de retentativas e a estratégia fixa, linear ou exponencial, e persistam a lista de atrasos calculada ao lado de cada endpoint de assinante.
Documentar a latência de entrega no pior caso
Mostre total_wait e os atrasos acumulados por tentativa em runbooks para que o plantão saiba quanto as retentativas podem demorar antes do dead-letter.
Fixar agendas golden no CI
Afirme que arquivos de configuração se expandem aos mesmos arrays de atraso dos workers de produção, capturando regressões acidentais de strategy ou base_delay.
Perguntas técnicas
Como monto uma agenda de retentativas de entrega de webhook?
Envie max_retries (1–100), um base_delay positivo e strategy fixed, linear ou exponential. A API devolve os atrasos ordenados, total_wait e uma agenda com esperas acumuladas por tentativa.
Qual é a diferença entre backoff fixo, linear e exponencial?
O fixo repete base_delay em cada tentativa. O linear usa base_delay vezes o número da tentativa. O exponencial usa base_delay vezes dois elevado a tentativa menos um.
Por que base_delay precisa ser positivo?
Atrasos nulos ou negativos não definem uma espera útil antes de uma retentativa e arriscam busy-loop no worker de entrega. base_delay não positivo falha com invalid_input e não é cobrado.
Quanto custa montar uma agenda de retentativas de webhook?
A ferramenta do navegador é gratuita. Requisições API usam saldo pré-pago KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.