Zum Inhalt springen

Event-Bus

Ereignisse veröffentlichen und abonnieren für Observability — Überwachen von Runtime- und Anwendungsaktivität und Reagieren darauf.

Den Event-Bus ausschließlich zur Beobachtung verwenden: Monitoring, Logging, Metriken und reaktive Nebeneffekte. Es ist ein Best-Effort-Publish/Subscribe-Kanal, kein zuverlässiger Transport — keine Geschäftslogik darauf aufbauen und keine garantierte Zustellung erwarten. Für geschäftskritisches Messaging Prozess-Messaging (`process.send`), Channels oder die [Nachrichten-Queue](lua/storage/queue.md) verwenden.
local events = require("events")

Ereignisse vom Event-Bus abonnieren:

-- Alle Bestellungs-Events abonnieren
local sub, err = events.subscribe("orders.*")
if err then
return nil, err
end
-- Bestimmte Event-Art abonnieren
local sub = events.subscribe("users", "user.created")
-- Alle Events von einem System abonnieren
local sub = events.subscribe("payments")
-- Events verarbeiten
local 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
ParameterTypBeschreibung
systemstringSystem-Muster (unterstützt Wildcards wie “test.*“)
kindstringEvent-Art-Filter (optional)

Gibt zurück: Subscription, error

Ein Ereignis an den Event-Bus senden:

-- Bestellung-erstellt-Event senden
local ok, err = events.send("orders", "order.created", "/orders/123", {
order_id = "123",
customer_id = "456",
total = 99.99
})
if err then
return nil, err
end
-- Benutzer-Event senden
events.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 senden
events.send("payments", "payment.completed", "/payments/" .. payment.id, {
payment_id = payment.id,
order_id = payment.order_id,
amount = payment.amount,
method = payment.method
})
-- Ohne Daten senden
events.send("system", "heartbeat", "/health")
ParameterTypBeschreibung
systemstringSystem-Identifikator
kindstringEvent-Art/-Typ
pathstringEvent-Pfad für Routing
dataanyEvent-Payload (optional)

Gibt zurück: boolean, error

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))
end

Event-Felder: system, kind, path, data

Abonnement beenden und Channel schließen:

sub:close()
AktionRessourceBeschreibung
events.subscribesystemEvents von einem System abonnieren
events.sendsystemEvents an ein System senden
BedingungArtWiederholbar
Leeres Systemerrors.INVALIDnein
Leere Arterrors.INVALIDnein
Leerer Pfaderrors.INVALIDnein
Policy abgelehnterrors.INVALIDnein

Siehe Fehlerbehandlung für die Arbeit mit Fehlern.