Zum Inhalt

timer: Erweiterte Timer für nginx-module-lua

Installation

Wenn Sie das RPM-Repository-Abonnement noch nicht eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.

CentOS/RHEL 7 oder 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

Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.

Dieses Dokument beschreibt lua-resty-timer v1.1.0, veröffentlicht am 06. November 2020.


Erweiterte Timer für OpenResty. Bietet wiederkehrende, stornierbare, nodeweite Timer, die über das hinausgehen, was die grundlegenden OpenResty-Timer tun.

Synopsis

http {
    lua_shared_dict timer_shm 1m;
    init_worker_by_lua_block {
        local timer = require("resty.timer")

        local options = {
            interval = 0.1,           -- Ablaufintervall in Sekunden
            recurring = true,         -- wiederkehrender oder einzelner Timer
            immediate = true,         -- das anfängliche Intervall wird 0 sein
            detached = false,         -- getrennt ausführen oder garbagecollectible sein
            jitter = 0.1,             -- ein zufälliges Intervall hinzufügen
            expire = object.handler,  -- Callback beim Ablauf des Timers
            cancel = function(reason, self, param1)
                -- wird aufgerufen, wenn der Timer storniert wird
            end,
            shm_name = "timer_shm",   -- shm, das für nodeweite Timer verwendet werden soll
            key_name = "my_key",      -- Schlüsselname, der für nodeweite Timer verwendet werden soll
            sub_interval = 0.1,       -- maximale zusätzliche Verzögerung zwischen Arbeitern
        }

        local object
        object = {                            -- ein Objekt mit einem Timer erstellen
            count = 0,
            handler = function(self, param1)  -- der Timer-Callback als Methode
                -- hier etwas tun
                print(param1)                 --> "Param 1"
            end,

            -- erstellen und zum Objekt hinzufügen, aber auch als 'self' an den Handler übergeben
            timer = timer(options, object, "Param 1"),
        }

        -- das Objekt und den Timer verankern
        _M.global_object = object     -- wird gesammelt, wenn es nicht verankert ist

        -- den Timer stornieren
        object.timer:cancel()
    }
}

Beschreibung

Der OpenResty-Timer ist ziemlich eingeschränkt, dieser Timer fügt eine Reihe von gängigen Optionen als Parameter hinzu, ohne dass sie in jedem Projekt neu codiert (und erneut getestet) werden müssen.

  • wiederkehrende Timer (unterstützt von OR sowie durch ngx.timer.every)

  • sofortiger erster Lauf für wiederkehrende Timer

  • stornierbare Timer

  • Stornierungs-Callback, der aufgerufen wird, wenn der Timer storniert wird

  • garbage collectible Timer, die es ermöglichen, Timer (optional) an Objekte anzuhängen und automatisch zu stoppen, wenn sie garbage collected werden.

  • nodeweite Timer: Der gleiche Timer, der in jedem Worker gestartet wird, wird im gesamten System nur einmal ausgeführt. Wenn der Worker, der ihn ausführt, entfernt wird, wird der Timer automatisch auf einem anderen Worker ausgeführt.

Siehe die online LDoc-Dokumentation für die vollständige API.

Geschichte

Die Versionierung basiert streng auf Semantic Versioning

Veröffentlichung neuer Versionen:

  • aktualisieren Sie das Änderungsprotokoll unten (PRs sollten zusammen mit einem Änderungsprotokolleintrag zusammengeführt werden)
  • basierend auf dem Änderungsprotokoll die neue SemVer-Version bestimmen
  • eine neue rockspec erstellen
  • die Dokumente mit ldoc rendern (nicht innerhalb von PRs tun)
  • committen als "release x.x.x" (keine rockspec-Revision einfügen)
  • den Commit mit "x.x.x" taggen (keine rockspec-Revision einfügen)
  • Commit und Tag pushen
  • Rock zu luarocks hochladen: luarocks upload rockspecs/[name] --api-key=abc

1.1.0 (6-Nov-2020)

  • Feat: eine jitter-Option hinzugefügt. Dies fügt ein zufälliges Intervall hinzu, um die Timer zu verteilen (im Falle der gleichzeitigen Planung vieler Timer).

1.0.0 (21-Sep-2020)

  • Änderung [BREAKING]: die wiederkehrenden Timer werden jetzt als schlafender Thread implementiert, was effizienter ist. Nebeneffekt ist, dass der Timer nur NACH der Ausführung des Handlers neu geplant wird. Wenn der Handler lange läuft, werden die einzelnen Ausführungen weiter auseinander liegen.

0.3 (28-May-2018)

  • Feat: Hinzufügen der Stornierungs-Callback-Auslösung, wenn der Timer garbage collected wird. Dies ändert das erste Argument des cancel-Callbacks und ist daher breaking.

0.2 (12-Feb-2018) Fehlerbehebung

  • Fix: Fehlerbehebung in der unpack-Funktion, die den Tabellenlängenparameter nicht beachtet
  • Docs: kleine Korrekturen und Tippfehler

0.1 (22-Nov-2017) Erste Veröffentlichung

  • Hinzufügen der sub_interval-Option zur Reduzierung von Verzögerungen
  • Erste Hochladung

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-timer.