Lua Entry-Arten

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

Entry-Arten

Art Beschreibung
function.lua Zustandslose Funktion, läuft bei Bedarf
process.lua Lang laufender Aktor mit Zustand
workflow.lua Dauerhafter Workflow (Temporal)
library.lua Gemeinsam genutzter Code, der von anderen Entries importiert wird
module.lua Modul-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.

Gemeinsame Felder

Alle Lua-Entries teilen diese Felder:

Feld Erforderlich Beschreibung
name ja Eindeutiger Name innerhalb des Namespace
kind ja Eine der oben genannten Lua-Arten
source ja Lua-Dateipfad (file://path.lua)
method function/process/workflow Zu exportierende Funktion (Bibliotheken nutzen sie nicht)
modules nein Erlaubte Module für require()
imports nein Andere Entries als lokale Module
meta nein Durchsuchbare Metadaten

function.lua

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.

process.lua

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

workflow.lua

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.

library.lua

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)

Module

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.

Imports

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

Pool-Konfiguration

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
Feld Pools Beschreibung
type alle Scheduler-Implementierung (siehe Tabelle unten)
size static, lazy, adaptive Anfängliche Worker-Anzahl
workers Engine v2 Anzahl der Worker-Threads
buffer static, adaptive Aufgabenwarteschlange-Kapazität (Standard: workers * 64)
warm_start adaptive Einträge beim Start vorkompilieren
max_size lazy, adaptive Obergrenze für elastisches Wachstum (Standard: 16)
Typ Verhalten
inline Synchrone Ausführung in der Goroutine des Aufrufers. Geringste Latenz, keine Isolation zwischen Aufrufen.
lazy Keine Idle-Worker, Erstellung bei Bedarf, Abbau im Leerlauf.
static Pool fester Größe (Channel-basiert). Vorhersagbar bei stabiler Last.
adaptive Auto-skalierender Pool — wächst bei Last, schrumpft im Leerlauf. Standard.

Metadaten

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"})

Siehe auch