rabbitmq-enterprise-toolkit
Version:
🚀 Enterprise-grade RabbitMQ wrapper for Node.js & TypeScript - High-throughput messaging with automatic retry, DLQ, batch processing & graceful shutdown. Production-ready AMQP client with zero message loss guarantee.
79 lines • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.calculateDelay = calculateDelay;
exports.generateMessageId = generateMessageId;
exports.createGracefulShutdown = createGracefulShutdown;
exports.formatError = formatError;
exports.normalizeQueueName = normalizeQueueName;
exports.createDLQName = createDLQName;
exports.createRetryQueueName = createRetryQueueName;
/**
* Retry mekanizması için delay hesaplama
*/
function calculateDelay(retryCount, options) {
const { retryDelay, delayType, delay = retryDelay } = options;
if (delayType === 'exponential') {
return Math.min(delay * Math.pow(2, retryCount), 60000); // Max 60 saniye
}
return retryDelay;
}
/**
* Mesaj idempotency kontrolü için unique ID oluşturma
*/
function generateMessageId() {
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
}
/**
* Graceful shutdown için promise wrapper
*/
function createGracefulShutdown(timeoutMs) {
let isShuttingDown = false;
let shutdownPromise = null;
const shutdown = async () => {
if (shutdownPromise) {
return shutdownPromise;
}
isShuttingDown = true;
shutdownPromise = new Promise((resolve) => {
setTimeout(() => {
resolve();
}, timeoutMs);
});
return shutdownPromise;
};
return {
shutdown,
isShuttingDown: () => isShuttingDown
};
}
/**
* Hata mesajlarını formatla
*/
function formatError(error) {
if (error instanceof Error) {
return error.message;
}
if (typeof error === 'string') {
return error;
}
return 'Unknown error occurred';
}
/**
* Queue adını normalize et
*/
function normalizeQueueName(queueName) {
return queueName.toLowerCase().replace(/[^a-z0-9\-_.]/g, '-');
}
/**
* Dead letter queue adını oluştur
*/
function createDLQName(originalQueueName) {
return `${normalizeQueueName(originalQueueName)}.dlq`;
}
/**
* Retry queue adını oluştur
*/
function createRetryQueueName(originalQueueName, retryCount) {
return `${normalizeQueueName(originalQueueName)}.retry.${retryCount}`;
}
//# sourceMappingURL=helpers.js.map