consul-event: Consul Events HTTP API Wrapper
Installation
Wenn Sie noch kein RPM-Repository-Abonnement 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-consul-event
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-consul-event
Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.
Dieses Dokument beschreibt lua-resty-consul-event v0.3.0, das am 17. Juni 2019 veröffentlicht wurde.
Consul Events HTTP API Wrapper
Übersicht
Dieses Modul bietet einen OpenResty-Client-Wrap für die Consul Events API. Dies ermöglicht die Integration von OpenResty mit dem benutzerdefinierten Ereignismechanismus von Consul, der verwendet werden kann, um Skripting-Infrastrukturen zu erstellen, um automatisierte Deployments durchzuführen, Dienste neu zu starten oder andere Orchestrierungsaktionen auszuführen.
Dieses Modul nutzt das Konzept der blockierenden Abfragen von Consul, um auf Ereignisse zu achten, die unter einem bestimmten Ereignisnamen gesendet werden.
Zusammenfassung
local event = require "resty.consul.event"
local e, err = event.new({
host = "127.0.0.1",
port = 8500,
})
if err then
ngx.log(ngx.ERR, err)
end
e:watch("foo", function(event)
ngx.log(ngx.INFO, "ich habe ", ngx.decode_base64(event.payload))
end)
Verwendung
new
syntax: e, err = event.new(opts?)
Instanziiert ein neues Watch-Objekt. opts kann eine Tabelle mit den folgenden Optionen sein:
host: String, der den Consul-Host definiertport: Nummer, die den Consul-Port definierttimeout: Nummer, in Sekunden, die an die Consul blockierende Abfrage-API über denwait-Parameter übergeben wird. Dieser Wert wird auch verwendet, um TCP-Schicht-Timeouts zu definieren, die höher als das Timeout der Anwendungsschicht gesetzt sind.ssl_verify: Boolean, der definiert, ob das vom Remote-Consul-Server präsentierte TLS-Zertifikat validiert werden soll.token: String, der das Consul ACL-Token definiert, das über denX-Consul-Token-Anforderungsheader gesendet wird.
watch
syntax: e:watch(name, callback, initial_index, seen_ids)
Überwacht die Consul-Ereignis-API auf Ereignisse, die unter einem bestimmten name gesendet werden, und führt die Funktion callback aus. callback erhält einen einzelnen Parameter event, der den Inhalt eines einzelnen Ereignisses enthält, wie er von der Consul Events API definiert ist. Callback-Funktionen sind in pcall eingewickelt, sodass es sicher ist, innerhalb dieser Funktion einen Fehler auszulösen. Callback-Funktionen können einen einzelnen Wert zurückgeben, aber dieser Wert ist weitgehend bedeutungslos; derzeit wird dieser einzelne Wert als Debug-Eintrag protokolliert.
Die Werte initial_index und seen_ids sind optional und können verwendet werden, um das Watch gegen einen bestimmten Zustand im Consul-Ereignisring zu initialisieren. initial_index wird als String erwartet, der von einem vorherigen X-Consul-Index-Header ausgegeben wird. seen_ids wird als Liste von Consul Event-ID-Werten erwartet, für die Callback-Ereignisse nicht ausgeführt werden sollen. Zum Beispiel kann der aktuelle Zustand des Ereignis-Puffers verwendet werden, um ein bestimmtes Watch zu initialisieren:
local h = require("resty.http").new()
-- hole die aktuellen Ereignisse
local res, err = h:request_uri("http://127.0.0.1:8500/v1/event/list?name=foo")
if err then
ngx.log(ngx.ERR, err)
end
local event = require "resty.consul.event"
local e, err = event.new({
host = "127.0.0.1",
port = 8500,
})
if err then
ngx.log(ngx.ERR, err)
end
local l = {}
for _, e in ipairs(require("cjson").decode(res.body)) do
table.insert(l, e.ID)
end
ngx.timer.at(0, function()
e:watch(
"foo",
function(p) ngx.log(ngx.DEBUG, p.payload) end,
res.headers["X-Consul-Index"],
l
)
end)
Hinweis: Der Inhalt dieser Funktion läuft in einer Endlosschleife, um die Consul-Ereignis-API unbegrenzt zu überwachen. Daher wird dringend empfohlen, diese Funktion innerhalb eines Hintergrundtimers aufzurufen, der über ngx.timer.at generiert wird.
Testen
Ein Test-Suite für dieses Repository ist vorhanden. Die Tests sind mit Test::Nginx geschrieben und werden mit prove ausgeführt.
Um das Verhalten der Bibliothek optimal zu testen, wird erwartet, dass ein Consul-Server läuft und zugänglich ist. Standardmäßig wird Consul unter 127.0.0.1:8500 aufgerufen; der Consul-Host und der Port können durch Definieren der Umgebungsvariablen TEST_NGINX_CONSUL_ADDR und TEST_NGINX_CONSUL_PORT überschrieben werden.
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-consul-event.