timer: Timers étendus pour nginx-module-lua
Installation
Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
CentOS/RHEL 7 ou 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
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-timer v1.1.0 publié le 06 novembre 2020.
Timers étendus pour OpenResty. Fournit des timers récurrents, annulables, à l'échelle du nœud, au-delà de ce que font les timers de base d'OpenResty.
Synopsis
http {
lua_shared_dict timer_shm 1m;
init_worker_by_lua_block {
local timer = require("resty.timer")
local options = {
interval = 0.1, -- intervalle d'expiration en secondes
recurring = true, -- timer récurrent ou unique
immediate = true, -- l'intervalle initial sera de 0
detached = false, -- exécuter détaché, ou être collectable par le garbage collector
jitter = 0.1, -- ajouter un intervalle aléatoire
expire = object.handler, -- rappel à l'expiration du timer
cancel = function(reason, self, param1)
-- sera appelé lorsque le timer est annulé
end,
shm_name = "timer_shm", -- shm à utiliser pour les timers à l'échelle du nœud
key_name = "my_key", -- nom de clé à utiliser pour les timers à l'échelle du nœud
sub_interval = 0.1, -- délai supplémentaire maximal entre les travailleurs
}
local object
object = { -- créer un objet avec un timer
count = 0,
handler = function(self, param1) -- le rappel du timer en tant que méthode
-- faire quelque chose ici
print(param1) --> "Param 1"
end,
-- créer et ajouter à l'objet, mais aussi le passer comme 'self' au handler
timer = timer(options, object, "Param 1"),
}
-- ancrer l'objet et le timer
_M.global_object = object -- sera collecté s'il n'est pas ancré
-- annuler le timer
object.timer:cancel()
}
}
Description
Le timer d'OpenResty est assez limité, ce timer ajoute un certain nombre d'options courantes en tant que paramètres sans avoir à les recoder (et à les retester) dans chaque projet.
-
timers récurrents (soutenus par OR également via
ngx.timer.every) -
première exécution immédiate pour les timers récurrents
-
timers annulables
-
rappel d'annulation, appelé lorsque le timer est annulé
-
timers collectables par le garbage collector, permettant aux timers d'être (facultativement) attachés à des objets et de s'arrêter automatiquement lorsqu'ils sont collectés.
-
timers à l'échelle du nœud : le même timer démarré dans chaque travailleur ne s'exécutera qu'une seule fois dans tout le système. Si le travailleur qui l'exécute est supprimé, le timer sera automatiquement exécuté sur un autre travailleur.
Consultez la documentation LDoc en ligne pour l'API complète.
Historique
La version est strictement basée sur Semantic Versioning
Publication de nouvelles versions :
- mettre à jour le changelog ci-dessous (les PR doivent être fusionnées y compris une entrée dans le changelog)
- en fonction du changelog, déterminer la nouvelle version SemVer
- créer un nouveau rockspec
- rendre la documentation en utilisant
ldoc(ne pas faire cela dans les PR) - valider comme "release x.x.x" (ne pas inclure la révision du rockspec)
- taguer le commit avec "x.x.x" (ne pas inclure la révision du rockspec)
- pousser le commit et le tag
- télécharger le rock sur luarocks :
luarocks upload rockspecs/[name] --api-key=abc
1.1.0 (6-Nov-2020)
- Feat : ajout d'une option
jitter. Cela ajoute un intervalle aléatoire pour distribuer les timers (en cas de planification de nombreux timers à la fois).
1.0.0 (21-Sep-2020)
- Changement [BREAKING] : les timers récurrents sont maintenant implémentés comme un thread dormant, ce qui est plus efficace. L'effet secondaire est que le timer n'est reprogrammé QU'APRÈS l'exécution du handler. Donc, si le handler prend du temps, les exécutions individuelles seront plus espacées.
0.3 (28-May-2018)
- Feat : ajout de l'invocation du rappel d'annulation lors de la collecte du timer par le garbage collector. Cela change le premier argument du rappel
cancel, et donc c'est une rupture.
0.2 (12-Feb-2018) Correction de bug
- Fix : correction d'un bug dans la fonction
unpackne respectant pas le paramètre de longueur de table - Docs : petites corrections et fautes de frappe
0.1 (22-Nov-2017) Version initiale
- Ajout de l'option
sub_intervalpour réduire les délais - Téléchargement initial
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-timer.