Política de reintentos de webhooks
El sistema de notificaciones por webhook implementa una política de reintentos con backoff exponencial, control de dominio afectado y una fecha máxima de reintento para garantizar una entrega eficiente y evitar sobrecarga ante errores persistentes.
Condiciones generales
- Cada notificación fallida se reintentará varias veces, con intervalos crecientes.
- Los reintentos se programan en base al número de intentos previos usando una estrategia de backoff exponencial.
- Si el webhook sigue fallando tras cierto tiempo, la notificación se mueve al historial como fallida y se elimina del conjunto de pendientes.
Cálculo del siguiente intento
- Por cada intento fallido, se calcula el próximo intento con la fórmula:
nextRetrySeconds = 2^ndondenes el número de intentos realizados. - El valor se limita a un máximo de
4096segundos (~68 minutos).
Control por dominio (host)
Cuando el siguiente reintento supera los 16 segundos, el sistema asume una posible caída del host de destino. En ese caso:
- Se posponen todas las notificaciones del mismo dominio hasta el
NextRetrydel webhook actual. - Esto evita reintentos simultáneos hacia un servicio potencialmente no disponible.
Límite de reintentos por tiempo
Cada webhook tiene una propiedad RetryStopDate, calculada al momento de su creación:
RetryStopDate = DateTime.UtcNow.AddMinutes(RETRY_STOP_DATE_AFTER_MINUTES)
- El valor por defecto (
RETRY_STOP_DATE_AFTER_MINUTES) es 10080 minutos (7 días).
Cuando NextRetry > RetryStopDate, se deja de reintentar y la notificación se mueve al historial, guardando los intentos realizados y el estado final.
Condición de éxito
- Si el servidor responde con código 200 OK, la notificación se considera entregada correctamente.
- Se registra en el historial y se elimina de los pendientes.