Ir al contenido

Tipos de Entrada Lua

Configuración para entradas basadas en Lua: funciones, procesos, flujos de trabajo y bibliotecas.

TipoDescripción
function.luaFunción sin estado, se ejecuta bajo demanda
process.luaActor de larga duración con estado
workflow.luaFlujo de trabajo durable (Temporal)
library.luaCódigo compartido importado por otras entradas
module.luaSuperficie de módulo (biblioteca con múltiples métodos)

Cada tipo tiene una contraparte de bytecode precompilado (function.lua.bc, library.lua.bc, process.lua.bc, workflow.lua.bc) producida por wippy pack --bytecode. Los autores escriben entradas .lua; los tipos de bytecode se emiten automáticamente al empaquetar.

Todas las entradas Lua comparten estos campos:

CampoRequeridoDescripción
nameNombre único dentro del namespace
kindUno de los tipos Lua anteriores
sourceRuta del archivo Lua (file://path.lua)
methodfunction/process/workflowFunción a exportar (las bibliotecas no la usan)
modulesnoMódulos permitidos para require()
importsnoOtras entradas como módulos locales
metanoMetadatos buscables

Función sin estado llamada bajo demanda. Cada invocación es independiente.

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

Usar para: Manejadores HTTP, transformaciones de datos, utilidades.

Actor de larga duración que mantiene estado entre mensajes. Se comunica mediante paso de mensajes.

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

Usar para: Trabajadores en segundo plano, demonios de servicio, actores con estado.

Para ejecutar como servicio supervisado:

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

Flujo de trabajo durable que sobrevive a reinicios. El estado se persiste en Temporal.

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

Usar para: Procesos de negocio de múltiples pasos, orquestaciones de larga duración.

Código compartido que puede ser importado por otras entradas.

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

Otras entradas lo referencian vía imports:

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

En código Lua:

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

El campo modules controla qué módulos pueden cargarse con require():

modules:
- http
- json
- sql
- process

channel, print, subscribe y unsubscribe se cargan como globales de Lua y no necesitan aparecer en modules:.

Solo los módulos listados están disponibles. Esto proporciona:

  • Seguridad: Prevenir acceso a módulos del sistema
  • Dependencias explícitas: Claro qué necesita el código
  • Determinismo: Los flujos de trabajo solo obtienen módulos determinísticos

Consulte Runtime de Lua para módulos disponibles.

Importe otras entradas como módulos locales:

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

La clave se convierte en el nombre del módulo en código Lua. El valor es el ID de entrada (namespace:name).

Configure el pool de ejecución para funciones:

- name: handler
kind: function.lua
source: file://handler.lua
method: main
pool:
type: adaptive # por defecto
size: 4 # workers iniciales
max_size: 16 # tope para pools elásticos
CampoPoolsDescripción
typetodosImplementación del scheduler (ver tabla abajo)
sizestatic, lazy, adaptiveCantidad inicial de workers
workersengine v2Cantidad de hilos worker
bufferstatic, adaptiveCapacidad de la cola de tareas (por defecto workers * 64)
warm_startadaptivePrecompilar entradas al inicio
max_sizelazy, adaptiveTope superior para crecimiento elástico (por defecto 16)
TipoComportamiento
inlineEjecución síncrona en la goroutine del llamador. Mínima latencia, sin aislamiento entre llamadas.
lazyCero workers en reposo, se crean bajo demanda y se eliminan cuando están inactivos.
staticPool de tamaño fijo basado en canales. Predecible bajo carga estable.
adaptivePool auto-escalable — crece bajo carga, se reduce cuando está inactivo. Predeterminado.

Use meta para enrutamiento y descubrimiento:

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

Los metadatos son buscables vía el registro:

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