Zum Inhalt springen

Lua Entry-Arten

Konfiguration für Lua-basierte Entries: Funktionen, Prozesse, Workflows und Bibliotheken.

ArtBeschreibung
function.luaZustandslose Funktion, läuft bei Bedarf
process.luaLang laufender Aktor mit Zustand
workflow.luaDauerhafter Workflow (Temporal)
library.luaGemeinsam genutzter Code, der von anderen Entries importiert wird
module.luaModul-Oberfläche (Bibliothek mit mehreren Methoden)

Jede Art hat ein vorkompiliertes Bytecode-Gegenstück (function.lua.bc, library.lua.bc, process.lua.bc, workflow.lua.bc), das von wippy pack --bytecode erzeugt wird. Autoren schreiben .lua-Entries; die Bytecode-Arten werden beim Packen automatisch erzeugt.

Alle Lua-Entries teilen diese Felder:

FeldErforderlichBeschreibung
namejaEindeutiger Name innerhalb des Namespace
kindjaEine der oben genannten Lua-Arten
sourcejaLua-Dateipfad (file://path.lua)
methodfunction/process/workflowZu exportierende Funktion (Bibliotheken nutzen sie nicht)
modulesneinErlaubte Module für require()
importsneinAndere Entries als lokale Module
metaneinDurchsuchbare Metadaten

Zustandslose Funktion, die bei Bedarf aufgerufen wird. Jeder Aufruf ist unabhängig.

- name: handler
kind: function.lua
source: file://handler.lua
method: main
modules:
- http
- json

Verwendung für: HTTP-Handler, Datentransformationen, Hilfsfunktionen.

Lang laufender Aktor, der Zustand über Nachrichten hinweg beibehält. Kommuniziert über Nachrichtenübergabe.

- name: worker
kind: process.lua
source: file://worker.lua
method: main
modules:
- process
- sql

Verwendung für: Hintergrund-Worker, Service-Daemons, zustandsbehaftete Aktoren.

Um als überwachter Service zu laufen:

- name: worker_service
kind: process.service
process: app:worker
host: app:processes
lifecycle:
auto_start: true
restart:
max_attempts: 10

Dauerhafter Workflow, der Neustarts überlebt. Zustand wird in Temporal gespeichert.

- name: order_processor
kind: workflow.lua
source: file://order_workflow.lua
method: main
modules:
- workflow
- time

Verwendung für: Mehrstufige Geschäftsprozesse, lang laufende Orchestrierungen.

Gemeinsam genutzter Code, der von anderen Entries importiert werden kann.

- name: helpers
kind: library.lua
source: file://helpers.lua
modules:
- json
- base64

Andere Entries referenzieren sie über imports:

- name: handler
kind: function.lua
source: file://handler.lua
method: main
imports:
helpers: app.lib:helpers

Im Lua-Code:

local helpers = require("helpers")
helpers.format_date(timestamp)

Das modules-Feld steuert, welche Module mit require() geladen werden können:

modules:
- http
- json
- sql
- process

channel, print, subscribe und unsubscribe werden als Lua-Globale geladen — sie müssen nicht in modules: aufgeführt werden.

Nur aufgelistete Module sind verfügbar. Dies bietet:

  • Sicherheit: Verhindert Zugriff auf Systemmodule
  • Explizite Abhängigkeiten: Klar, was der Code benötigt
  • Determinismus: Workflows erhalten nur deterministische Module

Siehe Lua-Laufzeitumgebung für verfügbare Module.

Importieren Sie andere Entries als lokale Module:

imports:
utils: app.lib:utils # require("utils")
auth: app.auth:helpers # require("auth")

Der Schlüssel wird zum Modulnamen im Lua-Code. Der Wert ist die Entry-ID (namespace:name).

Konfigurieren Sie den Ausführungspool für Funktionen:

- name: handler
kind: function.lua
source: file://handler.lua
method: main
pool:
type: adaptive # Standard
size: 4 # Anfangs-Worker
max_size: 16 # Obergrenze für elastische Pools
FeldPoolsBeschreibung
typealleScheduler-Implementierung (siehe Tabelle unten)
sizestatic, lazy, adaptiveAnfängliche Worker-Anzahl
workersEngine v2Anzahl der Worker-Threads
bufferstatic, adaptiveAufgabenwarteschlange-Kapazität (Standard: workers * 64)
warm_startadaptiveEinträge beim Start vorkompilieren
max_sizelazy, adaptiveObergrenze für elastisches Wachstum (Standard: 16)
TypVerhalten
inlineSynchrone Ausführung in der Goroutine des Aufrufers. Geringste Latenz, keine Isolation zwischen Aufrufen.
lazyKeine Idle-Worker, Erstellung bei Bedarf, Abbau im Leerlauf.
staticPool fester Größe (Channel-basiert). Vorhersagbar bei stabiler Last.
adaptiveAuto-skalierender Pool — wächst bei Last, schrumpft im Leerlauf. Standard.

Verwenden Sie meta für Routing und Discovery:

- name: api_handler
kind: function.lua
meta:
type: handler
version: "2.0"
tags: [api, users]
source: file://api.lua
method: handle
modules:
- http
- json

Metadaten sind über die Registry durchsuchbar:

local registry = require("registry")
local handlers = registry.find({type = "handler"})