@suissa/universal-queues
Version:
Factory universal para mensageria (RabbitMQ, Kafka, SQS) para sistemas distribuídos.
43 lines • 2 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.defaultDlqHandler = defaultDlqHandler;
const promises_1 = __importDefault(require("fs/promises"));
const path_1 = __importDefault(require("path"));
// Diretório e arquivo padrão de auditoria DLQ
const DLQ_AUDIT_DIR = process.env.DLQ_AUDIT_DIR || './dlq_audit';
const DLQ_AUDIT_FILE = path_1.default.join(DLQ_AUDIT_DIR, `dlq_${new Date().toISOString().slice(0, 10)}.log`);
/**
* Handler padrão para mensagens enviadas à Dead Letter Queue (DLQ).
* - Log estruturado no console.
* - Persistência em arquivo para auditoria/futuro replay/manual review.
* - Emite evento local (pronto para integração com sistemas de monitoramento).
*/
async function defaultDlqHandler(msg, context) {
const now = new Date();
const dlqEvent = {
timestamp: now.toISOString(),
queue: context?.queue,
exchange: context?.exchange,
error: context?.error ? (context.error instanceof Error ? context.error.message : String(context.error)) : undefined,
message: msg
};
// Log estruturado no console (para Prometheus/Grafana/Splunk/etc)
console.warn('[DLQ]', JSON.stringify(dlqEvent, null, 2));
// Persistência em arquivo para auditoria (replay/manual review)
try {
await promises_1.default.mkdir(DLQ_AUDIT_DIR, { recursive: true });
await promises_1.default.appendFile(DLQ_AUDIT_FILE, JSON.stringify(dlqEvent) + '\n');
}
catch (fileErr) {
console.error('[DLQ][ERROR] Falha ao salvar em arquivo de auditoria:', fileErr);
}
// Exemplo de emissão de evento local (pronto para hook futuro)
// if (typeof process.emit === 'function') {
// process.emit('dlq_event', dlqEvent);
// }
// Futuro: integração com Sentry, Slack, email, etc.
}
//# sourceMappingURL=dlq.js.map