Skip to content

Fila, falhas e encerramento ​

Objetivo: entender como o assinante controla trabalho concorrente sem prometer entrega durável.

O callback precisa receber rápido ​

O cliente MQTT avisa a chegada de uma mensagem. O runtime captura receivedAt nesse callback, antes da espera na fila. Se medisse a hora só no worker, incluiria o atraso causado por mensagens anteriores.

SequentialQueue aceita itens e executa um worker de cada vez. A guarda running é marcada antes do primeiro await para impedir dois workers simultâneos.

O significado de “sequencial” ​

Cada item termina antes de iniciar o seguinte. Se a persistência falha, onError registra uma categoria genérica e a fila continua.

Não há retry automático desse item na fila. Ela fica em memória, não em uma tabela ou serviço de mensagens durável. Uma queda abrupta pode perder trabalho aceito que ainda não foi persistido.

Encerramento gracioso ​

O shutdown inicia desconexão MQTT, fecha novas admissões, espera os itens já aceitos e desconecta Prisma. A Promise de encerramento é reutilizada para que chamadas repetidas não iniciem limpezas concorrentes.

close impede novas entradas. onIdle espera worker e lista vazios. “Gracioso” é diferente de desligamento brusco do processo ou do host.

O que isso não resolve ​

MecanismoAjuda comNão garante
Fila sequencialOrdem de processamentoDurabilidade após crash
TransaçãoCoerência de uma gravaçãoEntrega única MQTT
QoS 1Entrega com possíveis repetiçõesBanco gravado exatamente uma vez
TimeoutLimite de esperaSaúde do inversor

Exercício ​

Uma mensagem falha no banco; a próxima será descartada?

Não por essa falha isolada. O worker informa o erro e continua. Isso não significa que a mensagem anterior será recuperada automaticamente.

Veja como essa etapa se relaciona à persistência.

Revisão: 06/10/2026. Base: queue.ts, mqtt-to-db/runtime.ts e subscriber.ts.

IFSP Campus Boituva · Energia, automação e software em um mesmo projeto