Temporary failures pause all deliveries to that destination for 30 seconds, consecutive ones for 2, 10 and then 30 minutes each. Temporary failures are:
- timeouts, connection, TLS and DNS errors
- HTTP 408, 425, 429 and 5xx responses
A Retry-After header in seconds extends the pause, up to 30 minutes. After the pause, one delivery probes the destination while the others wait. Any other response, including 4xx, resets the backoff and resumes all deliveries. Responses like 400, 404 or 410 are terminal and never retried. Redirects aren't followed and response bodies aren't read, only the HTTP status counts.
Deliveries still queued after 24 hours are dropped and logged as cms.webhook.delivery_expired. The pause state lives in the application cache, which must be shared by all servers and workers; with an array or null cache store, deliveries are retried one by one.
Workers abort a delivery after timeout + 13 seconds (23 seconds by default) for connecting, resolving the host name and recording the result. Set the queue connection's retry_after (or the broker's visibility timeout) higher, otherwise running deliveries are released twice. Also configure short DNS resolver timeouts on worker hosts, e.g. options timeout:1 attempts:2 in /etc/resolv.conf.
Deliveries that can't be pushed to the queue, e.g. because the queue server is down, are lost. The error is reported to the exception handler and the subscriptions show "Queue unavailable".