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.
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
- das ngx_lua-Modul: http://wiki.nginx.org/HttpLuaModule
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-pubsub.