Zum Inhalt

pubsub: Lua Pubsub-Clienttreiber für nginx-module-lua basierend auf der cosocket API

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-pubsub

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-pubsub

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

Dieses Dokument beschreibt lua-resty-pubsub v1.5, veröffentlicht am 13. November 2024.


Lua Pubsub-Clienttreiber für das ngx_lua basierend auf der cosocket API.

lua module lua module License

Beschreibung

Diese Lua-Bibliothek ist ein Pubsub-Clienttreiber für das ngx_lua NGINX-Modul: http://wiki.nginx.org/HttpLuaModule

Diese Lua-Bibliothek nutzt die cosocket API von ngx_lua, die ein 100% nicht blockierendes Verhalten gewährleistet. Diese Bibliothek sendet Nachrichten (mit Attributen) an Google Cloud Pubsub unter Verwendung von NGINX-Timern und HTTP-Anfragen.

Bitte beachten Sie, dass mindestens ngx_lua 0.9.3 oder ngx_openresty 1.4.3.7 erforderlich ist, und leider wird nur LuaJIT unterstützt (--with-luajit).

Zusammenfassung

    server {
        location = /publish {
            resolver 8.8.8.8 ipv6=off;

            content_by_lua_block {
                local cjson = require "cjson"
                local pubsub_producer = require "resty.pubsub.producer"
                local OAUTH_TOKEN = ngx.shared.OAUTH_TOKEN -- Ein anderes Dictionary kann ebenfalls bereitgestellt werden

                -- Ein Callback, der Nachrichten empfängt, wenn sie erfolgreich gesendet werden
                -- Typen von Nachrichten & err sind eine Tabelle
                local success_callback = function (topic, err, messages)
                    ngx.log(ngx.INFO, "Nachrichten: ", cjson.encode(messages), " erfolgreich an das Thema gesendet: ", topic)
                end

                -- Ein Callback, der Nachrichten empfängt, wenn das Senden fehlschlägt
                -- Typen von Nachrichten & err sind eine Tabelle
                local error_callback = function (topic, err, messages)
                    for _, message in ipairs(messages) do
                        ngx.log(ngx.ERR, "Fehler beim Senden der Nachricht: ", cjson.encode(message), " mit Fehler: ", cjson.encode(err))
                    end
                end

                local publish = function()

                    -- Pubsub-Produzenten-Konfiguration
                    local pubsub_config = {
                        project_id = "demo-project",
                        topic = "demo-topic",
                        pubsub_base_domain = "pubsub.googleapis.com",
                        pubsub_base_port = 443,
                        is_emulator = false,
                        producer_config = {
                            max_batch_size = 200, -- Anzahl der Pakete
                            max_buffering = 5000, -- maximale Anzahl der Pakete im Puffer
                            timer_interval = 10000, -- in Millisekunden
                            last_flush_interval = 5000, -- in Millisekunden
                            http_timeout = 6000, -- in Millisekunden
                            keepalive_max_idle_timeout = 2000, -- in Millisekunden
                            keepalive_pool_size = 50
                        },
                        oauth_config = {
                            service_account_key_path = "/etc/key.json", -- Ersetzen Sie dies durch Ihren eigenen Schlüsselpfad
                            oauth_base_uri = "https://www.googleapis.com/oauth2/v4/token",
                            oauth_scopes = {
                                "https://www.googleapis.com/auth/pubsub"
                            },
                            oauth_token_dict = OAUTH_TOKEN
                        },
                        success_callback = success_callback,
                        error_callback = error_callback
                    }

                    -- Erstellen Sie das Produzentenobjekt
                    -- Egal wie oft Sie new aufrufen, die Produzenteninstanz wird immer einmal pro Thema pro Arbeitsprozess generiert
                    local producer, err = pubsub_producer:new(pubsub_config)

                    -- Überprüfen Sie auch, ob beim Initialisieren des Produzenten ein Fehler aufgetreten ist
                    if err ~= nil then
                        ngx.log(ngx.ERR, "Konnte den Pubsub-Produzenten nicht erstellen ", err)
                        return
                    end

                    -- Schließlich senden Sie die Nachricht mit Attributen.
                    local ok, send_err = producer:send("Some Random Text", {
                        attr1 = "Test1",
                        attr2 = "Test2"
                    }, "optional_ordering_key")

                    -- Überprüfen Sie auch, ob beim Senden der Nachricht ein Fehler aufgetreten ist
                    if send_err ~= nil then
                        ngx.log(ngx.ERR, "Konnte keine Daten an Pubsub senden: ", send_err)
                        return
                    end

                end

                -- Nachricht veröffentlichen
                publish()
            }

        }
    }

Konfigurationen

Produzenten-Konfigurationen

Eigenschaft Datentyp Beschreibung Standardwert
project_id string Gibt die Projekt-ID als Zeichenfolge Ihres Pub/Sub-Projekts an keine (erforderlich)
topic string Gibt das Thema an, in das die Daten gesendet werden müssen keine (erforderlich)
pubsub_base_domain string Gibt die Basisdomäne an, über die die HTTP-Verbindung hergestellt wird. pubsub.googleapis.com
pubsub_base_port number Gibt den Basisdomänenport an, über den die HTTP-Verbindung hergestellt wird. 443
is_emulator boolean Gibt einen booleschen Wert an. true, wenn Sie kommunizieren. false
producer_config.max_batch_size number Gibt die maximale Batchgröße an, die an Pubsub gesendet wird. 200
producer_config.max_buffering number Gibt die maximale Größe des Puffers an, der die Daten für einen bestimmten Zeitraum speichert. 5000
producer_config.timer_interval number (Millisekunden) Gibt das Zeitintervall an, in dem die veralteten Nachrichten im Puffer auf das Veröffentlichen überprüft werden. 10000
producer_config.last_flush_interval number (Millisekunden) Gibt das maximale Intervall zwischen der letzten Flush-Zeit und der aktuellen Zeit an. Wird verwendet, wenn die Pakete im Puffer über einen längeren Zeitraum weniger als die Batchgröße sind. 10000
producer_config.http_timeout number (Millisekunden) Setzt den Timeout-Schutz für nachfolgende Operationen, einschließlich der Connect-Methode. 5000
producer_config.keepalive_max_idle_timeout number (Millisekunden) Wird in httpc:set_keepalive verwendet, das versucht, die aktuelle Verbindung in den ngx_lua-Cosocket-Verbindungspool zu legen. 2000
producer_config.keepalive_pool_size number Wird in httpc:set_keepalive verwendet, das versucht, die aktuelle Verbindung in den ngx_lua-Cosocket-Verbindungspool zu legen. 50
oauth_config.service_account_key_path string Gibt den Pfad für den Dienstkontoschlüssel an, der zur Authentifizierung für das Pub/Sub-Projekt verwendet wird. keine (erforderlich)
oauth_config.oauth_base_uri string Gibt die Basis-URI an, an die die Anfrage an den Google-Autorisierungsserver für ein Token gesendet wird, das in nachfolgenden Anfragen verwendet wird. https://www.googleapis.com/oauth2/v4/token
oauth_config.oauth_scopes Liste von Zeichenfolgen Gibt eine Tabelle an, die OAuth 2.0-Scopes umfasst, die Sie möglicherweise anfordern müssen, um auf Google APIs zuzugreifen, abhängig von dem Zugriffsniveau, das Sie benötigen. {"https://www.googleapis.com/auth/pubsub"}
oauth_config.oauth_token_dict lua_shared_dict Gibt einen gemeinsamen Speicherbereich über Worker an, um als Speicher für das OAuth-Token zu dienen. ngx.shared.OAUTH_TOKEN
success_handler function Dies ist eine Callback-Funktion, die mit allen Nachrichten und deren Attributen bereitgestellt wird, die erfolgreich an Pubsub gesendet wurden. keine (optional)
error_handler function Dies ist eine Callback-Funktion, die ausgeführt wird, wenn ein Batch fehlschlägt. keine (optional)

Module

resty.pubsub.producer

Um dieses Modul zu laden, tun Sie einfach Folgendes

    local producer = require "resty.pubsub.producer"

Methoden

new

syntax: local p, err = producer:new(pubsub_config)

send

syntax: p:send(message, attributes[, ordering_key])

  • Erfordert eine Nachricht vom Typ string, Attribute vom Typ table und einen optionalen ordering_key vom Typ string

Siehe auch

GitHub

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