Tipos de Entrada Lua

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

Tipos de Entrada

Tipo Descripción
function.lua Función sin estado, se ejecuta bajo demanda
process.lua Actor de larga duración con estado
workflow.lua Flujo de trabajo durable (Temporal)
library.lua Código compartido importado por otras entradas

Campos Comunes

Todas las entradas Lua comparten estos campos:

Campo Requerido Descripción
name Nombre único dentro del namespace
kind Uno de los tipos Lua anteriores
source Ruta del archivo Lua (file://path.lua)
method Función a exportar
modules no Módulos permitidos para require()
imports no Otras entradas como módulos locales
meta no Metadatos buscables

function.lua

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.

process.lua

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
    - channel
    - 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

workflow.lua

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.

library.lua

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

- name: helpers
  kind: library.lua
  source: file://helpers.lua
  method: main
  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)

Módulos

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

modules:
  - http
  - json
  - sql
  - process
  - channel

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.

Imports

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

Configuración de Pool

Configure el pool de ejecución para funciones:

- name: handler
  kind: function.lua
  source: file://handler.lua
  method: main
  pool:
    type: inline    # Ejecutar en contexto del llamador

Tipos de pool:

  • inline - Ejecutar en contexto del llamador (por defecto para manejadores HTTP)

Metadatos

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

Vea También