Auto-reintento de solicitudes a la API (auto-retry
)
El plugin auto-retry es todo lo que necesitas para manejar límites de velocidad, es decir, errores con código 429.
Se puede utilizar para todos los bots durante el funcionamiento normal, pero será especialmente útil durante la difusión.
Este plugin es una función transformadora de la API, lo que significa que le permite interceptar y modificar las peticiones HTTP salientes sobre la marcha. Más concretamente, este plugin detectará automáticamente si una petición de la API falla con un valor retry
, es decir, debido a la limitación de velocidad. Entonces atrapará el error, esperará el período de tiempo especificado, y luego reintentará la solicitud.
Además de manejar los límites de velocidad, este plugin reintentará una petición si falla con un error interno del servidor, es decir, errores con código 500 o mayor.
Los errores de red (aquellos que lanzan un Http
en grammY) también causarán un reintento.
Reintentar estas peticiones es más o menos la única estrategia sensata para manejar estos dos tipos de errores.
Dado que ninguno de ellos proporciona un valor retry
, el plugin emplea un backoff exponencial que comienza a los 3 segundos y tiene un límite de una hora.
Instalación
Puedes instalar este plugin en el objeto bot
:
import { autoRetry } from "@grammyjs/auto-retry";
// Usa el plugin.
bot.api.config.use(autoRetry());
2
3
4
const { autoRetry } = require("@grammyjs/auto-retry");
// Usa el plugin.
bot.api.config.use(autoRetry());
2
3
4
import { autoRetry } from "https://deno.land/x/grammy_auto_retry@v2.0.2/mod.ts";
// Usa el plugin.
bot.api.config.use(autoRetry());
2
3
4
Si ahora llama, por ejemplo, a send
y se encuentra con un límite de velocidad, parecerá que la petición tarda un tiempo inusual. Bajo el capó, se están realizando múltiples peticiones HTTP, con los retrasos apropiados entre ellas.
Configuración
Puede pasar un objeto de opciones que especifique un número máximo de reintentos (max
), o un umbral para un tiempo máximo de espera (max
).
Limitar Reintentos
Tan pronto como se agote el número máximo de reintentos, los siguientes errores para la misma petición no se volverán a intentar. En su lugar, se pasa el objeto de error de Telegram, fallando efectivamente la petición con un Grammy
.
De forma similar, si la petición falla con retry
mayor que lo especificado por la opción max
, la petición fallará inmediatamente.
autoRetry({
maxRetryAttempts: 1, // Sólo se repiten las peticiones una vez
maxDelaySeconds: 5, // Falla inmediatamente si tenemos que esperar >5 segundos
});
2
3
4
Rechazo de errores internos del servidor
Puedes usar rethrow
para optar por no manejar los errores internos del servidor como se describe arriba.
De nuevo, se pasa el objeto de error de Telegram, fallando efectivamente la petición con un Grammy
.
autoRetry({
rethrowInternalServerErrors: true, // no gestionar los errores internos del servidor
});
2
3
Errores en la red
Puede usar rethrow
para optar por no manejar errores de red como se describe arriba.
Si se activa, las instancias lanzadas de Http
son pasadas, fallando la petición.
autoRetry({
rethrowHttpErrors: true, // no gestionar los errores de red
});
2
3
Resumen del plugin
- Nombre:
auto
-retry - Fuente
- Referencia de la API