Aller au contenu

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 unpack ne 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_interval pour 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.