@speckle/shared
Version:
Shared code between various Speckle JS packages
57 lines • 2.44 kB
JavaScript
import Bull from 'bull';
import { Redis } from 'ioredis';
import { isRedisReady } from '../redis/isRedisReady.js';
const clientCache = {};
export const initializeQueue = async ({ queueName, redisUrl, options }) => {
if (!(redisUrl in clientCache))
clientCache[redisUrl] = {};
const opts = {
...options,
// redisOpts here will contain at least a property of connectionName which will identify the queue based on its name
createClient(type, redisOpts) {
switch (type) {
case 'client':
if (redisUrl in clientCache && clientCache[redisUrl].client !== undefined) {
return clientCache[redisUrl].client;
}
else {
const client = new Redis(redisUrl, redisOpts ?? {});
clientCache[redisUrl].client = client;
return client;
}
case 'subscriber':
if (redisUrl in clientCache &&
clientCache[redisUrl].subscriber !== undefined) {
return clientCache[redisUrl].subscriber;
}
else {
const subscriber = new Redis(redisUrl, {
...redisOpts,
maxRetriesPerRequest: null,
enableReadyCheck: false
});
clientCache[redisUrl].subscriber = subscriber;
return subscriber;
}
case 'bclient':
return new Redis(redisUrl, {
...redisOpts,
maxRetriesPerRequest: null,
enableReadyCheck: false
});
default:
throw new Error(`Unexpected connection type: ${type}`);
}
}
};
const newQueue = new Bull(queueName, opts);
// bull does not check if redis is ready...
//
// logger.info('Checking Redis connection is ready...')
if (!clientCache[redisUrl].client)
throw new Error('Redis client not properly initialized');
await isRedisReady(clientCache[redisUrl].client);
// await isRedisReady(clientCache[redisUrl].subscriber)
return await newQueue.isReady();
};
//# sourceMappingURL=config.js.map