Pular para o conteúdo

Message Queue

Publique e consuma mensagens de filas distribuidas. Suporta multiplos backends incluindo RabbitMQ e outros brokers compativeis com AMQP.

Para configuração de fila, veja Queue.

local queue = require("queue")

Enviar mensagens para uma fila por ID:

local ok, err = queue.publish("app:tasks", {
action = "send_email",
user_id = 456,
template = "welcome"
})
if err then
return nil, err
end
ParâmetroTipoDescrição
queue_idstringIdentificador da fila (formato: “namespace:name”)
dataanyDados da mensagem (tabelas, strings, numeros, booleans)
headerstableHeaders opcionais da mensagem

Retorna: boolean, error

Headers habilitam roteamento, prioridade e rastreamento:

queue.publish("app:notifications", {
type = "order_shipped",
order_id = order.id
}, {
priority = "high",
correlation_id = request_id
})

Dentro de um consumer de fila, acessar a mensagem atual:

local msg, err = queue.message()
if err then
return nil, err
end
local msg_id = msg:id()
local priority = msg:header("priority")
local all_headers = msg:headers()

Retorna: Message, error

Disponível apenas ao processar mensagens de fila em contexto de consumer.

MétodoRetornaDescrição
id()string, errorIdentificador único da mensagem
header(key)any, errorValor de header único (nil se ausente)
headers()table, errorTodos os headers da mensagem
ack()boolean, errorConfirmar processamento (single-shot)
nack()boolean, errorSinalizar falha para reentrega ou dead-letter (single-shot)

O runtime faz auto-ack no sucesso do handler e auto-nack no erro do handler. Chame ack/nack apenas para confirmar antecipadamente.

local stats, err = queue.info("app:tasks")
-- stats pode conter: message_count, consumer_count, ready (depende do driver)

Retorna: table, error

Consumers de fila sao definidos como entry points que recebem o payload diretamente:

entries:
- kind: queue.consumer
id: email_worker
queue: app:emails
method: handle_email
function handle_email(payload)
local msg = queue.message()
logger:info("Processing", {
message_id = msg:id(),
to = payload.to
})
local ok, err = email.send(payload.to, payload.template, payload.data)
if err then
return nil, err -- Mensagem sera reenfileirada ou dead-lettered
end
end

Operações de fila estao sujeitas a avaliação de política de segurança.

AçãoRecursoDescrição
queue.publish-Permissão geral para publicar mensagens
queue.publish.queueID da FilaPublicar em fila específica

Ambas as permissões sao verificadas: primeiro a permissão geral, depois a específica da fila.

CondiçãoTipoRetentável
ID da fila vazioerrors.INVALIDnão
Dados da mensagem vazioserrors.INVALIDnão
Sem contexto de entregaerrors.INVALIDnão
Publicação não permitidaerrors.INVALIDnão
Publicação falhouerrors.INTERNALnão

Veja Error Handling para trabalhar com erros.