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

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 ja Zu exportierende Funktion
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
    - channel
    - 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
  method: main
  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

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: inline    # Im Kontext des Aufrufers ausführen

Pool-Typen:

  • inline - Im Kontext des Aufrufers ausführen (Standard für HTTP-Handler)

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