Перейти до вмісту

Повторні спроби та невдалі повідомлення

Доставка — це зобов’язання донести одну подію до одного ендпоінта. Railhook пробує її за сталим розкладом, драбиною повторів, доки ендпоінт не відповість 2xx або драбина не вичерпається. Те, від чого він відмовився, зберігається в «Невдалих повідомленнях», щоб рішення ухвалила людина.

Статус Значення
PENDING Створена або чекає, коли настане час наступної спроби.
PROCESSING Захоплена воркером на одну спробу. Доставку, що лишилася тут після збою воркера, повертають у PENDING.
SUCCESS Ендпоінт відповів 2xx. Більше нічого не надсилається.
FAILED Полишена до вичерпання драбини, бо ще одна спроба не допоможе.
DLQ Драбину вичерпано або доставка пережила граничний вік. У панелі — «Невдалі повідомлення».

Що дає право на ще одну спробу

Section titled “Що дає право на ще одну спробу”
Результат спроби Що відбувається
2xx SUCCESS.
408, 429, будь-який 5xx Повтор за драбиною.
Помилка з’єднання або таймаут Повтор за драбиною.
Трансформацію не вдалося застосувати Повтор за драбиною. Сирий payload замість неї ніколи не надсилається.
Будь-який інший 4xx FAILED уже на першій спробі. 400 чи 404 означає, що запит неправильний, і повтор його не виправить.
Ендпоінт не може її прийняти, наприклад, він не перевірений або його URL відхилила перевірка приватних адрес FAILED без спроби.

Кожне очікування має розкид від 50% до 150% свого значення, щоб гурт повторів не надходив одночасно.

Напрямок Спроби Очікування між спробами Номінально загалом
Вихідний (доставка) 7 1 хв, 5 хв, 15 хв, 1 год, 6 год, 24 год близько 31 год 21 хв
Вхідний (пересилання) 5 1 хв, 5 хв, 15 хв, 1 год близько 1 год 21 хв

Це типові значення. Підписка може задати власні maxAttempts (від 1 до 20) і retryDelays у секундах, як і вхідне призначення. Якщо спроб більше, ніж очікувань, повторюється останнє очікування.

Частину роботи відхиляють ще до того, як зроблено запит: ліміт швидкості орендаря чи ендпоінта, зайняті всі слоти паралельності, розімкнений запобіжник або впорядкована доставка, що чекає на попередню. Це відкладення. Воно не витрачає спробу й не рухає драбину; доставку просто планують знову. Рахуються лише запити, які справді відбулися.

Одна спроба чекає на відповідь 30 секунд, якщо підписка не задає timeoutSeconds у межах від 1 до 60. Таймаут вважається невдалою спробою й повторюється, як будь-яка інша невдача.

Доставку, яка лишається невиконаною через 96 годин після створення, переносять у «Невдалі повідомлення» незалежно від кількості спроб. Для вхідних пересилань межа — 24 години. Граничний вік ловить зобов’язання, що перестали рухатися; ті, що падають, завершує драбина.

Змінна Типово Напрямок
DELIVERY_ESCALATION_HARD_CAP_HOURS 96 Вихідний
FORWARD_ESCALATION_HARD_CAP_HOURS 24 Вхідний

Воркер не запуститься, якщо типова драбина з максимальним розкидом не вміщується у свою межу.

«Невдалі повідомлення» показують те, від чого Railhook відмовився: ендпоінт, тип події, кількість зроблених спроб і останню помилку. Той самий список доступний через API: GET /api/v1/projects/{projectId}/dlq.

Повтор із «Невдалих повідомлень» повертає ту саму доставку в PENDING і дає їй ще 3 спроби. Вона зберігає ідентифікатор доставки, історію спроб і Idempotency-Key, тож отримувач, який її вже обробив, може розпізнати дублікат. Перша нова спроба надсилається одразу. Повторіть одну доставку через POST /api/v1/projects/{projectId}/dlq/{deliveryId}/retry або кілька через POST /api/v1/projects/{projectId}/dlq/retry.

Для вхідних вебхуків такий самий екран називається «Невдалі пересилання». Повтор невдалого пересилання створює нове пересилання на те саме призначення, яке знову починається зі спроби 1.