timer: Temporizadores extendidos para nginx-module-lua
Instalación
Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.
CentOS/RHEL 7 o Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-timer
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-timer
Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.
Este documento describe lua-resty-timer v1.1.0 lanzado el 06 de noviembre de 2020.
Temporizadores extendidos para OpenResty. Proporciona temporizadores recurrentes, cancelables y de alcance de nodo, más allá de lo que hacen los temporizadores básicos de OpenResty.
Sinopsis
http {
lua_shared_dict timer_shm 1m;
init_worker_by_lua_block {
local timer = require("resty.timer")
local options = {
interval = 0.1, -- intervalo de expiración en segundos
recurring = true, -- temporizador recurrente o único
immediate = true, -- el intervalo inicial será 0
detached = false, -- ejecutarse de forma independiente, o ser recolectable por el garbage collector
jitter = 0.1, -- añadir un intervalo aleatorio
expire = object.handler, -- callback en la expiración del temporizador
cancel = function(reason, self, param1)
-- se llamará cuando el temporizador sea cancelado
end,
shm_name = "timer_shm", -- shm a utilizar para temporizadores de alcance de nodo
key_name = "my_key", -- nombre de clave a utilizar para temporizadores de alcance de nodo
sub_interval = 0.1, -- retraso extra máximo entre trabajadores
}
local object
object = { -- crear algún objeto con un temporizador
count = 0,
handler = function(self, param1) -- el callback del temporizador como un método
-- hacer algo aquí
print(param1) --> "Param 1"
end,
-- crear y añadir al objeto, pero también pasarlo como 'self' al handler
timer = timer(options, object, "Param 1"),
}
-- anclar el objeto y el temporizador
_M.global_object = object -- será recolectado si no está anclado
-- cancelar el temporizador
object.timer:cancel()
}
}
Descripción
El temporizador de OpenResty es bastante limitado, este temporizador añade una serie de opciones comunes como parámetros sin tener que recodificarlos (y volver a probarlos) en cada proyecto.
-
temporizadores recurrentes (soportados por OR también a través de
ngx.timer.every) -
ejecución inmediata inicial para temporizadores recurrentes
-
temporizadores cancelables
-
callback de cancelación, llamado cuando el temporizador es cancelado
-
temporizadores recolectables por el garbage collector, permitiendo que los temporizadores se (opcionalmente) adjunten a objetos y se detengan automáticamente cuando sean recolectados.
-
temporizadores de alcance de nodo: el mismo temporizador iniciado en cada trabajador solo se ejecutará una vez en todo el sistema. Si el trabajador que lo ejecuta es eliminado, el temporizador se ejecutará automáticamente en otro trabajador.
Consulta la documentación en línea de LDoc para la API completa.
Historia
El versionado se basa estrictamente en Semantic Versioning
Lanzamiento de nuevas versiones:
- actualizar el changelog a continuación (los PR deben ser fusionados incluyendo una entrada en el changelog)
- basándose en el changelog, determinar la nueva versión SemVer
- crear un nuevo rockspec
- renderizar la documentación usando
ldoc(no hacer esto dentro de los PR) - hacer commit como "release x.x.x" (no incluir la revisión del rockspec)
- etiquetar el commit con "x.x.x" (no incluir la revisión del rockspec)
- empujar el commit y la etiqueta
- subir el rock a luarocks:
luarocks upload rockspecs/[name] --api-key=abc
1.1.0 (6-Nov-2020)
- Feat: añadir una opción
jitter. Esto añade un intervalo aleatorio para distribuir los temporizadores (en caso de programar muchos temporizadores a la vez).
1.0.0 (21-Sep-2020)
- Cambio [BREAKING]: los temporizadores recurrentes ahora se implementan como un hilo en espera, lo que es más eficiente. El efecto secundario es que el temporizador solo se vuelve a programar DESPUÉS de ejecutar el handler. Así que si el handler es de larga duración, entonces las ejecuciones individuales estarán más separadas.
0.3 (28-May-2018)
- Feat: se añadió la invocación del callback de cancelación al ser recolectado el temporizador. Esto cambia el primer argumento del callback
cancel, y por lo tanto es un cambio importante.
0.2 (12-Feb-2018) Corrección de errores
- Fix: corrección de error en la función
unpackque no respetaba el parámetro de longitud de la tabla - Docs: pequeñas correcciones y errores tipográficos
0.1 (22-Nov-2017) Lanzamiento inicial
- Se añadió la opción
sub_intervalpara reducir retrasos - Carga inicial
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-timer.