Planning réessais webhook
Cinq réessais exponentiels à partir d'une base de 1000 attendent 1000, 2000, 4000, 8000 et 16000, soit 31000 au total : choisissez le nombre de réessais, le délai de base et la stratégie pour obtenir le planning complet avec les attentes cumulées. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Nombre maximal de tentatives
- 5
- Délai de base
- 1 000
- Stratégie
- Exponential
- Délais
- 1 000, 2 000, 4 000, 8 000, 16 000
- Attente totale
- 31 000
- Nombre de tentatives
- 5
backoff fixe, linéaire, exponentiel
Pourquoi écrire noir sur blanc le plan de réessais
Quand une notification d'événement échoue, le système qui l'envoie attend puis réessaie. Ceux qui livrent ces notifications et ceux qui les reçoivent ont besoin d'une liste explicite des attentes avant chaque réessai, pas d'une vague promesse de backoff quelque part dans la chaîne. Sans planning publié, l'équipe d'exploitation ne peut pas raisonner sur le pire délai de livraison, et les simulations de charge ne reproduisent pas les intervalles exacts que la production insérera entre les essais. Cet outil prend un nombre maximal de réessais, un délai de base supérieur à zéro et une stratégie, puis renvoie le délai de chaque essai, l'attente cumulée et une courte formule à garder près d'un tableau de bord ou dans vos procédures.
Fixe, linéaire ou exponentiel, et l'erreur courante
Le backoff fixe garde le même délai de base à chaque essai : simple à comprendre et ménageant les destinataires qui n'ont besoin que d'une courte pause. Le linéaire multiplie la base par le numéro de l'essai, en comptant à partir de un, si bien que les derniers réessais attendent proportionnellement plus sans croître aussi vite que l'exponentiel. L'exponentiel double à chaque fois : cinq réessais depuis 1000 donnent 1000, 2000, 4000, 8000 et 16000, soit 31000 au total. L'erreur courante est un délai de base nul ou négatif, qui ferait tourner une file en boucle ; il est refusé immédiatement. Gardez tous les délais dans une seule unité, en général les millisecondes.
Questions fréquentes
Le planning inclut-il du jitter aléatoire ?
Appliquez votre propre jitter par-dessus si vous avez besoin de dispersion entre workers.
Combien de temps attend-on au total avec cinq réessais exponentiels ?
Avec un délai de base de 1000, les attentes sont de 1000, 2000, 4000, 8000 et 16000, et l'attente cumulée atteint 31000 avant le cinquième essai. Le résultat utilise l'unité que vous avez choisie, en général les millisecondes.
Quelle différence entre backoff fixe, linéaire et exponentiel ?
Le fixe attend le même délai de base avant chaque essai. Le linéaire multiplie la base par le numéro de l'essai, en comptant à partir de un. L'exponentiel double l'attente à chaque fois : la base multipliée par deux puissance le numéro de l'essai moins un.
Quelle unité utiliser pour le délai de base ?
Celle que vous voulez, pourvu que tous les délais la partagent ; les millisecondes sont l'usage courant. La base doit être supérieure à zéro, car une attente nulle ou négative ferait tourner une file sans pause : ces valeurs sont donc refusées.
Combien de réessais peut-on planifier ?
De 1 à 100. Chaque essai reçoit exactement un délai avant de partir, et le planning indique le numéro de l'essai, son délai et l'attente cumulée jusque-là, ce qui rend le pire délai de livraison facile à lire.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
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)Exemple de requête
{
"max_retries": 5,
"base_delay": 1000,
"strategy": "exponential"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.webhook_retry_schedule_build",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Les récepteurs de webhooks et les workers de livraison ont besoin d'une liste explicite de temps d'attente avant chaque réessai, pas d'une promesse vague que le backoff sera appliqué quelque part dans la pile. Ce constructeur de planning de réessais de livraison webhook prend un nombre maximal de réessais, un délai de base strictement positif et une stratégie fixe, linéaire ou exponentielle, puis renvoie les délais par tentative, les attentes cumulées et une courte formule que vous pouvez figer dans des tests ou afficher à côté d'un tableau de bord. La même logique pure s'exécute gratuitement dans le navigateur et via l'API, de sorte qu'un plan d'échelle exponentielle à cinq réessais hors ligne correspond à ce que votre worker en périphérie utilisera pour configurer des chemins de notification ou des boucles de livraison personnalisées. Les délais de base invalides échouent immédiatement avec invalid_input au lieu d'inventer des attentes nulles ou négatives qui satureraient une file.
Qu'est-ce qu'un planning de réessais webhook et en quoi les trois stratégies diffèrent
Sans planning publié, les opérateurs ne peuvent pas raisonner sur la latence de livraison au pire cas, et les tests de charge ne reproduisent pas les écarts exacts qu'un worker de production insérera entre les réessais. Le backoff fixe conserve le même délai de base à chaque tentative : simple à raisonner et clément pour les systèmes en aval qui n'ont besoin que d'un court refroidissement. Le backoff linéaire multiplie le délai de base par l'index de tentative (base un), de sorte que les réessais ultérieurs attendent proportionnellement plus longtemps sans croître aussi vite qu'une pure exponentielle. Un planning de réessais de livraison webhook est la liste ordonnée des délais que vous attendez avant la tentative un, la deux, et ainsi de suite après un POST échoué vers l'URL de l'abonné. Cette capacité encode trois familles courantes de backoff utilisées dans les bus de messages et les clients HTTP. Le backoff exponentiel double le délai précédent à chaque fois en utilisant base_delay multiplié par deux à la puissance tentative moins un, le schéma classique pour les pannes réseau transitoires et les limites de débit. Vous fournissez max_retries comme le nombre d'emplacements de réessai à matérialiser, base_delay comme graine positive dans l'unité choisie (souvent des millisecondes) et strategy parmi fixed, linear ou exponential. La réponse reprend ces entrées, liste les délais dans l'ordre, les somme en total_wait et développe un tableau schedule avec numéro de tentative, délai et attente cumulée afin que graphiques d'interface et générateurs de configuration n'aient pas besoin d'arithmétique supplémentaire.
Contrat d'entrée, forme de la réponse et cas d'échec de validation
Envoyez en POST un corps JSON avec trois champs obligatoires. max_retries est un entier de un à cent indiquant combien de réessais planifier. base_delay est un nombre fini strictement supérieur à zéro dans toute unité cohérente ; zéro et les valeurs négatives sont rejetés car une attente non positive fait soit du busy-spin, soit n'a aucun sens pour la planification. strategy doit être la chaîne fixed, linear ou exponential (insensible à la casse après trim). Des alias tels que retries, base_ms et backoff sont acceptés pour que les formes de configuration existantes se mappent proprement. Champs manquants, max_retries non entiers, base_delay non fini et stratégies inconnues lèvent invalid_input et ne sont pas facturés. En cas de succès le corps inclut max_retries, base_delay, strategy, delays comme tableau plat, total_wait comme somme des délais, attempt_count égal à max_retries, schedule comme objets avec attempt, delay et cumulative, et formula rappelant la forme fermée de la stratégie choisie. Exemple : max_retries cinq, base_delay mille, strategy exponential produit des délais de mille, deux mille, quatre mille, huit mille et seize mille avec total_wait de trente et un mille. Associez le planning à votre propre politique de jitter si vous avez besoin de dispersion aléatoire ; ce point d'accès omet volontairement le jitter et les horodatages d'horloge murale pour que les résultats restent déterministes entre navigateur et API. Le plafond de max_retries est cent afin qu'une faute de frappe n'étende pas une charge énorme ni ne fasse déborder des produits intermédiaires sur de grandes échelles exponentielles.
Où construire un planning de réessais apporte de la valeur dans les systèmes réels
Les harnais de test de charge injectent le même tableau de délais que le worker de production, éliminant le classique écart où le staging réessaie plus vite que la production et masque des bugs de limite de débit. Les plateformes de livraison qui exposent des réglages de fiabilité des webhooks peuvent appeler ce constructeur lorsqu'un opérateur choisit le maximum de réessais et un mode de backoff, puis stocker les délais résultants à côté du secret du point d'accès et de la clé de signature. Les runbooks d'incidents bénéficient d'un total_wait imprimable pour que l'astreinte sache combien de temps un abonné instable peut retarder avant la dernière tentative. Les générateurs OpenAPI et SDK peuvent documenter des échelles d'exemple concrètes sans maintenir à la main des tables qui divergent du code d'exécution. Comme l'implémentation est du parse pur de niveau A, chaque appel réussi coûte le prix de base publié $0.002 sans jetons de modèle ni réseau sortant ; une validation échouée ne consomme pas de solde. Gardez base_delay et total_wait dans la même unité que vos primitives de sleep afin de ne jamais convertir par accident des millisecondes en secondes en branchant le planning dans une boucle de worker.
Cas d'intégration
Configurer le backoff de livraison webhook dans un tableau de bord
Laissez les opérateurs choisir le maximum de réessais et la stratégie fixe, linéaire ou exponentielle, puis persister la liste de délais calculée à côté de chaque point d'accès abonné.
Documenter la latence de livraison au pire cas
Affichez total_wait et les délais cumulés par tentative dans les runbooks pour que l'astreinte sache combien les réessais peuvent prendre avant le dead-letter.
Figer des plannings golden dans le CI
Affirmez que les fichiers de configuration s'étendent aux mêmes tableaux de délais que les workers de production, capturant les régressions accidentelles de strategy ou base_delay.
Questions techniques
Comment construire un planning de réessais de livraison webhook ?
Envoyez max_retries (1–100), un base_delay positif et strategy fixed, linear ou exponential. L'API renvoie les délais ordonnés, total_wait et un planning avec les attentes cumulées pour chaque tentative.
Quelle est la différence entre backoff fixe, linéaire et exponentiel ?
Le fixe répète base_delay à chaque tentative. Le linéaire utilise base_delay multiplié par le numéro de tentative. L'exponentiel utilise base_delay multiplié par deux à la puissance tentative moins un.
Pourquoi base_delay doit-il être positif ?
Des délais nuls ou négatifs ne définissent pas une attente utile avant un réessai et risquent un busy-loop du worker de livraison. Un base_delay non positif échoue avec invalid_input et n'est pas facturé.
Combien coûte la construction d'un planning de réessais webhook ?
L'outil navigateur est gratuit. Les requêtes API utilisent le solde prépayé KIT à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.