Event-Bus
Event-Bus
Abschnitt betitelt „Event-Bus“Ereignisse veröffentlichen und abonnieren für Observability — Überwachen von Runtime- und Anwendungsaktivität und Reagieren darauf.
local events = require("events")Events abonnieren
Abschnitt betitelt „Events abonnieren“Ereignisse vom Event-Bus abonnieren:
-- Alle Bestellungs-Events abonnierenlocal sub, err = events.subscribe("orders.*")if err then return nil, errend
-- Bestimmte Event-Art abonnierenlocal sub = events.subscribe("users", "user.created")
-- Alle Events von einem System abonnierenlocal sub = events.subscribe("payments")
-- Events verarbeitenlocal ch = sub:channel()while true do local evt, ok = ch:receive() if not ok then break end
logger:info("Received event", { system = evt.system, kind = evt.kind, path = evt.path }) handle_event(evt)end| Parameter | Typ | Beschreibung |
|---|---|---|
system | string | System-Muster (unterstützt Wildcards wie “test.*“) |
kind | string | Event-Art-Filter (optional) |
Gibt zurück: Subscription, error
Events senden
Abschnitt betitelt „Events senden“Ein Ereignis an den Event-Bus senden:
-- Bestellung-erstellt-Event sendenlocal ok, err = events.send("orders", "order.created", "/orders/123", { order_id = "123", customer_id = "456", total = 99.99})if err then return nil, errend
-- Benutzer-Event sendenevents.send("users", "user.registered", "/users/" .. user.id, { user_id = user.id, email = user.email, created_at = time.now():format("2006-01-02T15:04:05Z07:00")})
-- Zahlungs-Event sendenevents.send("payments", "payment.completed", "/payments/" .. payment.id, { payment_id = payment.id, order_id = payment.order_id, amount = payment.amount, method = payment.method})
-- Ohne Daten sendenevents.send("system", "heartbeat", "/health")| Parameter | Typ | Beschreibung |
|---|---|---|
system | string | System-Identifikator |
kind | string | Event-Art/-Typ |
path | string | Event-Pfad für Routing |
data | any | Event-Payload (optional) |
Gibt zurück: boolean, error
Subscription-Methoden
Abschnitt betitelt „Subscription-Methoden“Channel abrufen
Abschnitt betitelt „Channel abrufen“Den Channel zum Empfangen von Ereignissen holen:
local ch = sub:channel()
local evt, ok = ch:receive()if ok then print("System:", evt.system) print("Kind:", evt.kind) print("Path:", evt.path) print("Data:", json.encode(evt.data))endEvent-Felder: system, kind, path, data
Subscription schließen
Abschnitt betitelt „Subscription schließen“Abonnement beenden und Channel schließen:
sub:close()Berechtigungen
Abschnitt betitelt „Berechtigungen“| Aktion | Ressource | Beschreibung |
|---|---|---|
events.subscribe | system | Events von einem System abonnieren |
events.send | system | Events an ein System senden |
| Bedingung | Art | Wiederholbar |
|---|---|---|
| Leeres System | errors.INVALID | nein |
| Leere Art | errors.INVALID | nein |
| Leerer Pfad | errors.INVALID | nein |
| Policy abgelehnt | errors.INVALID | nein |
Siehe Fehlerbehandlung für die Arbeit mit Fehlern.