redis-smq
Version:
A simple high-performance Redis message queue for Node.js.
34 lines • 1.59 kB
JavaScript
import { async } from 'redis-smq-common';
import { ConsumerHeartbeat } from '../consumer-heartbeat/consumer-heartbeat.js';
import { consumerQueues } from '../consumer-queues.js';
import { processingQueue } from '../message-handler/processing-queue/processing-queue.js';
import { EMessageUnknowledgmentReason, } from '../types/index.js';
import { Worker } from './worker.js';
class WatchConsumersWorker extends Worker {
work = (cb) => {
const redisClient = this.redisClient.getInstance();
if (redisClient instanceof Error) {
cb(redisClient);
return void 0;
}
consumerQueues.getQueueConsumerIds(redisClient, this.queueParsedParams.queueParams, (err, consumerIds) => {
if (err)
cb(err);
else {
async.eachOf(consumerIds ?? [], (consumerId, _, done) => {
ConsumerHeartbeat.isConsumerAlive(redisClient, consumerId, (err, alive) => {
if (err)
done(err);
else if (!alive) {
processingQueue.unknowledgeMessage(redisClient, consumerId, [this.queueParsedParams.queueParams], this.logger, EMessageUnknowledgmentReason.OFFLINE_CONSUMER, (err) => done(err));
}
else
done();
});
}, (err) => cb(err));
}
});
};
}
export default (payload) => new WatchConsumersWorker(payload);
//# sourceMappingURL=watch-consumers.worker.js.map