@yzion/queue-lib
v1.0.2
Published
Biblioteca de filas e workers com RabbitMQ via token e Vault
Maintainers
Readme
QueueLib - Biblioteca de Filas e Workers com RabbitMQ, Vault e Tokens
Biblioteca Node.js/TypeScript para gerenciamento de filas e workers com RabbitMQ, suporte a token via Vault, dead-letter queues (DLQ) e integração simples com qualquer aplicação.
Publish
npm login
npm publish --access publicInstalação
npm install @yzion/queue-lib
yarn add @yzion/queue-lib
Uso da lib
Configuração
A biblioteca suporta configuração via:
Token direto: passando token nas opções do QueueManager.
Vault: usando VaultClient para obter o token em runtime.
Fallback .env: se Vault ou token não estiverem disponíveis.
Exemplo .env:
RABBITMQ_HOST=localhost
RABBITMQ_USER=guest
RABBITMQ_TOKEN=DEV_TOKEN
VAULT_URL=http://localhost:4000Uso Básico
// QueueManager
import { QueueManager } from 'queue-lib';
import { VaultClient } from 'queue-lib';
const vault = new VaultClient({
baseUrl: 'http://localhost:4000',
secretName: 'rabbitmq-token-test'
});
const qm = new QueueManager({
host: 'localhost',
username: 'guest',
protocol: 'amqps',
vault
});
await qm.connect();
console.log('Conectado ao RabbitMQ');
// Criar fila com DLQ
await qm.createQueue('ordersQueue');
// Enviar mensagem
await qm.sendMessage('ordersQueue', { id: 1, product: 'Produto Teste' });
WorkerManager
import { WorkerManager } from 'queue-lib';
const wm = new WorkerManager(qm);
// Registrar worker com retries
wm.registerWorker(
'ordersQueue',
async (msg) => {
const content = JSON.parse(msg.content.toString());
console.log('Processando pedido:', content);
// lógica de processamento
},
{ retries: 3 }
);Events
// O QueueManager emite eventos para monitoramento:
// connected → conexão estabelecida
// queue:sent → mensagem enviada
// closed → conexão fechada
// Exemplo:
qm.logger.on('ordersQueue:sent', (msg) => {
console.log('Mensagem enviada:', msg);
});
Tests
A biblioteca possui testes unitários e integração.
Rodar todos os testes:
npm test
// Unitários: QueueManager, WorkerManager, VaultClient
// Integração: API simulada com express e workers
// Boas práticas
// Tokens e segurança
// Prefira usar Vault para gerar tokens dinâmicos.
// Nunca versionar tokens reais em repositório.
// DLQ
// Sempre use DLQ para não perder mensagens críticas.
// Fallback
// .env deve ser usado apenas como fallback ou em dev/local.
// Exemplo de integração com API:
import express from 'express';
import { QueueManager, WorkerManager, VaultClient } from 'queue-lib';
const app = express();
app.use(express.json());
const vault = new VaultClient({ baseUrl: 'http://localhost:4000', secretName: 'rabbitmq-token-test' });
const qm = new QueueManager({ host: 'localhost', username: 'guest', vault });
await qm.connect();
await qm.createQueue('apiOrdersQueue');
const wm = new WorkerManager(qm);
wm.registerWorker('apiOrdersQueue', async (msg) => {
const content = JSON.parse(msg.content.toString());
console.log('Processando via API:', content);
(qm as any).channel.ack(msg);
});
app.post('/orders', async (req, res) => {
await qm.sendMessage('apiOrdersQueue', req.body);
res.status(201).send({ status: 'queued' });
});
app.listen(3000, () => console.log('API rodando na porta 3000'));
