Lua-Entry-Kinds

Lua-Entry-Kinds bestimmen, wie Quellcode als Funktion, Prozess, Workflow oder Bibliothek geladen und ausgeführt wird.

Diese Seite ist eine Konfigurationsreferenz. Die YAML-Blöcke sind partielle Eintragsdefinitionen, die unter einer entries:-Map in einem Wippy-Index stehen; für sich allein sind sie keine vollständigen Anwendungen. Referenzierte Quelldateien, Imports, Abhängigkeiten, Process Hosts und Sicherheitsrichtlinien müssen im umgebenden Projekt vorhanden sein.

Entry-Kinds

Art Beschreibung
function.lua Zustandslose Funktion, wird bei Bedarf ausgeführt
process.lua Lang laufender Aktor mit Zustand
workflow.lua Dauerhafter Workflow (Temporal)
library.lua Gemeinsam genutzter Code, den andere Einträge importieren

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 '**' (oder einem Muster wie --bytecode 'app:**') erzeugt wird. Autoren schreiben .lua-Entries; die Bytecode-Arten werden beim Packen mit diesem Flag ausgegeben.

Gemeinsame Felder

Alle Lua-Einträge verwenden diese Felder:

Feld Erforderlich Beschreibung
name ja Eindeutiger Name im Namespace
kind ja Einer der oben aufgeführten Lua-Kinds
source ja Inline-Lua-Quellcode oder eine beim Laden der Registry aufgelöste Referenz file://path.lua
method function/process/workflow Zu exportierende Funktion (Bibliotheken verwenden das Feld nicht)
modules nein Erlaubte Module für require()
imports nein Andere Einträge als lokale Module
meta nein Durchsuchbare Metadaten

pool gilt nur für function.lua. security gilt für function.lua und process.lua.

function.lua

Ein function.lua-Eintrag wird bei Bedarf ausgeführt; jeder Aufruf wird unabhängig behandelt.

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

Verwenden Sie Funktionen für HTTP-Handler, Datentransformationen und Hilfsfunktionen.

process.lua

Ein process.lua-Eintrag ist ein lang laufender Aktor, der Zustand hält und über Nachrichten kommuniziert.

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

Wählen Sie einen Prozess für Hintergrund-Worker, Service-Daemons und zustandsbehaftete Aktoren.

So wird er als überwachter Service ausgeführt:

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

workflow.lua

Ein workflow.lua-Eintrag definiert einen dauerhaften Workflow, dessen Zustand in Temporal persistiert wird.

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

Verwenden Sie Workflows für mehrstufige Geschäftsprozesse und lang laufende Orchestrierung.

library.lua

Ein library.lua-Eintrag stellt gemeinsam genutzten Code bereit, den andere Einträge importieren können.

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

Andere Einträge referenzieren ihn ü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 Feld modules steuert, welche Module mit require() geladen werden können:

modules:
  - http
  - json
  - sql

channel, payload, print, process, subscribe und unsubscribe werden als globale Lua-Werte geladen und müssen nicht unter modules: stehen. require("process") ist ebenfalls ohne modules:-Deklaration erlaubt.

Nur aufgeführte integrierte Module und unter imports deklarierte Aliasse sind verfügbar. Die Modul-Allowlist begrenzt den Zugriff auf Runtime-Capabilities, macht Abhängigkeiten explizit und beschränkt Workflows auf workflowkompatible Modulklassen.

Verfügbare Module behandelt Lua-Runtime.

Imports

Andere Einträge lassen sich als lokale Module importieren:

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 Eintrags-ID (namespace:name).

Funktions-Pools

Mit pool konfigurieren Sie, wie ein Funktionseintrag ausgeführt wird:

- name: handler
  kind: function.lua
  source: file://handler.lua
  method: main
  pool:
    type: adaptive    # explizit; weglassen, um die Auto-Auswahl (lazy) zu nutzen
    max_size: 16      # Obergrenze für elastisches Wachstum
Feld Pools Beschreibung
type alle Scheduler-Implementierung (siehe Tabelle unten)
workers static Anzahl der Worker-Threads (fällt auf size zurück, dann 8)
size static Worker-Anzahl, wenn workers nicht gesetzt ist; wird type weggelassen, wählt size ohne max_size einen Inline-Pool
buffer static Aufgabenwarteschlange-Kapazität (Standard: workers * 64)
max_size lazy, adaptive Obergrenze für elastisches Wachstum (Standard: 16; 100, wenn type weggelassen wird)
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.

Wird type weggelassen, wird der Pool aus den übrigen Feldern automatisch gewählt: standardmäßig ein Lazy-Pool, ein statischer Pool, wenn workers gesetzt ist, ein Inline-Pool, wenn nur size gesetzt ist.

Metadaten

Mit meta versehen Sie Einträge mit durchsuchbaren Feldern 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
    - registry

Metadaten lassen sich über die Registry durchsuchen:

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

Die Abfrage gibt alle passenden Registry-Einträge zurück. Der Lua-Code gehört zu einem ausführbaren Eintrag, dessen modules-Liste registry enthält, etwa dem oben gezeigten api_handler-Eintrag.

Siehe auch