Повтор запитів до API (auto-retry
)
Цей плагін — це все, що вам потрібно для обробки обмежень кількості запитів до API, тобто помилок з кодом 429. Його можна використовувати для будь-якого бота під час звичайної роботи, але особливо корисним він буде під час трансляції.
Цей плагін є функцієюretry
, тобто був обмеженний. Він перехоплює помилку, чекає вказаний проміжок часу, а потім повторює запит.
Окрім обробки лімітів перевищення кількості запитів, цей плагін повторно виконає запит, якщо він завершився через внутрішню помилку сервера, тобто помилкою з кодом 500 або більшим. Мережеві помилки (ті, що викидають Http
в grammY) також призведуть до повторної спроби. Повторні спроби таких запитів є більш-менш єдиною розумною стратегією для роботи з цими двома типами помилок. Оскільки жоден з них не надає значення retry
, плагін використовує експоненціальний відступ, починаючи з 3-х секунд і обмежуючись однією годиною.
Встановлення
Ви можете встановити цей плагін на обʼєкт bot
наступним чином:
import { autoRetry } from "@grammyjs/auto-retry";
// Використовуємо плагін.
bot.api.config.use(autoRetry());
2
3
4
const { autoRetry } = require("@grammyjs/auto-retry");
// Використовуємо плагін.
bot.api.config.use(autoRetry());
2
3
4
import { autoRetry } from "https://deno.land/x/grammy_auto_retry@v2.0.1/mod.ts";
// Використовуємо плагін.
bot.api.config.use(autoRetry());
2
3
4
Якщо ви зараз викличете, наприклад, send
й зіткнетеся з обмеженням, це виглядатиме ніби запит просто надзвичайно довго виконується. Насправді виконується декілька запитів HTTP з відповідними затримками між ними.
Конфігурація
Ви можете передати обʼєкт параметрів, який визначає максимальну кількість спроб (max
) або межу максимального часу очікування (max
).
Як тільки максимальна кількість спроб буде вичерпана, наступні спроби надіслати цей запит більше не робитимуться. Замість цього буде передано обʼєкт помилки від Telegram, що фактично означає невдалість запиту з супутньою помилкою Grammy
.
Аналогічно, якщо запит коли-небудь зазнає невдачі з retry
більшим, ніж вказано в параметрі max
, запит відразу буде визначено як невдалий.
autoRetry({
maxRetryAttempts: 1, // повторювати запити лише один раз
maxDelaySeconds: 5, // запит визначається невдалим негайно, якщо доводиться чекати більше 5-ти секунд
});
2
3
4
Ви можете використовувати retry
, щоб включити всі інші внутрішні помилки сервера Telegram (код стану >= 500) у наведену вище процедуру. Ці помилки будуть негайно повторені, але вони також враховують параметр max
.
Перекидання внутрішніх помилок сервера
Ви можете використовувати rethrow
, щоб відмовитися від обробки внутрішніх помилок сервера, як описано вище. Знову ж таки, обʼєкт помилки з Telegram буде передано далі, що фактично призведе до невдачі запиту з Grammy
.
autoRetry({
rethrowInternalServerErrors: true, // не обробляти внутрішні помилки сервера
});
2
3
Перекидання мережевих помилок
Ви можете використовувати rethrow
, щоб відмовитися від обробки мережевих помилок, як описано вище. Якщо цей параметр увімкнено, екземпляри Http
передаватимуться далі, якщо запит не вдасться виконати.
autoRetry({
rethrowHttpErrors: true, // не обробляти мережеві помилки
});
2
3