Повторні спроби та невдалі повідомлення
Доставка — це зобов’язання донести одну подію до одного ендпоінта. Railhook пробує її за сталим розкладом, драбиною повторів, доки ендпоінт не відповість 2xx або драбина не вичерпається. Те, від чого він відмовився, зберігається в «Невдалих повідомленнях», щоб рішення ухвалила людина.
Статуси доставки
Section titled “Статуси доставки”| Статус | Значення |
|---|---|
PENDING |
Створена або чекає, коли настане час наступної спроби. |
PROCESSING |
Захоплена воркером на одну спробу. Доставку, що лишилася тут після збою воркера, повертають у PENDING. |
SUCCESS |
Ендпоінт відповів 2xx. Більше нічого не надсилається. |
FAILED |
Полишена до вичерпання драбини, бо ще одна спроба не допоможе. |
DLQ |
Драбину вичерпано або доставка пережила граничний вік. У панелі — «Невдалі повідомлення». |
Що дає право на ще одну спробу
Section titled “Що дає право на ще одну спробу”| Результат спроби | Що відбувається |
|---|---|
2xx |
SUCCESS. |
408, 429, будь-який 5xx |
Повтор за драбиною. |
| Помилка з’єднання або таймаут | Повтор за драбиною. |
| Трансформацію не вдалося застосувати | Повтор за драбиною. Сирий payload замість неї ніколи не надсилається. |
Будь-який інший 4xx |
FAILED уже на першій спробі. 400 чи 404 означає, що запит неправильний, і повтор його не виправить. |
| Ендпоінт не може її прийняти, наприклад, він не перевірений або його URL відхилила перевірка приватних адрес | FAILED без спроби. |
Драбини повторів
Section titled “Драбини повторів”Кожне очікування має розкид від 50% до 150% свого значення, щоб гурт повторів не надходив одночасно.
| Напрямок | Спроби | Очікування між спробами | Номінально загалом |
|---|---|---|---|
| Вихідний (доставка) | 7 | 1 хв, 5 хв, 15 хв, 1 год, 6 год, 24 год | близько 31 год 21 хв |
| Вхідний (пересилання) | 5 | 1 хв, 5 хв, 15 хв, 1 год | близько 1 год 21 хв |
Це типові значення. Підписка може задати власні maxAttempts (від 1 до 20) і retryDelays у секундах, як і вхідне призначення. Якщо спроб більше, ніж очікувань, повторюється останнє очікування.
Що не є спробою
Section titled “Що не є спробою”Частину роботи відхиляють ще до того, як зроблено запит: ліміт швидкості орендаря чи ендпоінта, зайняті всі слоти паралельності, розімкнений запобіжник або впорядкована доставка, що чекає на попередню. Це відкладення. Воно не витрачає спробу й не рухає драбину; доставку просто планують знову. Рахуються лише запити, які справді відбулися.
Таймаути
Section titled “Таймаути”Одна спроба чекає на відповідь 30 секунд, якщо підписка не задає timeoutSeconds у межах від 1 до 60. Таймаут вважається невдалою спробою й повторюється, як будь-яка інша невдача.
Граничний вік
Section titled “Граничний вік”Доставку, яка лишається невиконаною через 96 годин після створення, переносять у «Невдалі повідомлення» незалежно від кількості спроб. Для вхідних пересилань межа — 24 години. Граничний вік ловить зобов’язання, що перестали рухатися; ті, що падають, завершує драбина.
| Змінна | Типово | Напрямок |
|---|---|---|
DELIVERY_ESCALATION_HARD_CAP_HOURS |
96 |
Вихідний |
FORWARD_ESCALATION_HARD_CAP_HOURS |
24 |
Вхідний |
Воркер не запуститься, якщо типова драбина з максимальним розкидом не вміщується у свою межу.
Невдалі повідомлення
Section titled “Невдалі повідомлення”«Невдалі повідомлення» показують те, від чого 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.