UNPKG

durabull

Version:

A durable workflow engine built on top of BullMQ and Redis

67 lines (66 loc) 2.36 kB
"use strict"; /** * BullMQ queue management */ Object.defineProperty(exports, "__esModule", { value: true }); exports.closeQueues = exports.getQueues = exports.initQueues = void 0; const bullmq_1 = require("bullmq"); const ioredis_1 = require("ioredis"); const global_1 = require("./config/global"); let queues = null; /** * Initialize queues with explicit configuration */ function initQueues(redisUrl, workflowQueue, activityQueue) { if (queues) { // If already initialized, check if config matches. // If it does, return existing. If not, throw error to prevent leaks/confusion. // Note: We can't easily check redisUrl equality due to potential formatting differences, // but we can check queue names. if (queues.workflow.name === workflowQueue && queues.activity.name === activityQueue) { return queues; } throw new Error('Queues already initialized with different configuration. Call closeQueues() first.'); } const connection = new ioredis_1.Redis(redisUrl, { maxRetriesPerRequest: null, }); queues = { workflow: new bullmq_1.Queue(workflowQueue, { connection }), activity: new bullmq_1.Queue(activityQueue, { connection }), workflowEvents: new bullmq_1.QueueEvents(workflowQueue, { connection }), activityEvents: new bullmq_1.QueueEvents(activityQueue, { connection }), connection, }; return queues; } exports.initQueues = initQueues; /** * Get queue instances (must call initQueues first in durable mode) */ function getQueues() { if (!queues) { const instance = global_1.Durabull.getActive(); if (instance) { const config = instance.getConfig(); return initQueues(config.redisUrl, config.queues.workflow, config.queues.activity); } throw new Error('Durabull instance not initialized. Call new Durabull(config) first.'); } return queues; } exports.getQueues = getQueues; /** * Close all queue connections */ async function closeQueues() { if (queues) { await queues.workflow.close(); await queues.activity.close(); await queues.workflowEvents.close(); await queues.activityEvents.close(); await queues.connection.quit(); queues = null; } } exports.closeQueues = closeQueues;