fixed up worker counts
This commit is contained in:
parent
f41622e530
commit
fa67d666dc
5 changed files with 182 additions and 28 deletions
|
|
@ -19,6 +19,7 @@ export interface QueueWorkerConfig {
|
|||
concurrency?: number;
|
||||
startWorker?: boolean;
|
||||
handlerRegistry?: HandlerRegistry;
|
||||
serviceName?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -33,6 +34,7 @@ export class Queue {
|
|||
private redisConfig: RedisConfig;
|
||||
private readonly logger: Logger;
|
||||
private readonly handlerRegistry?: HandlerRegistry;
|
||||
private serviceName?: string;
|
||||
|
||||
constructor(
|
||||
queueName: string,
|
||||
|
|
@ -45,9 +47,11 @@ export class Queue {
|
|||
this.redisConfig = redisConfig;
|
||||
this.logger = logger || console;
|
||||
this.handlerRegistry = config.handlerRegistry;
|
||||
this.serviceName = config.serviceName;
|
||||
|
||||
this.logger.debug('Queue constructor called', {
|
||||
queueName,
|
||||
serviceName: this.serviceName,
|
||||
hasHandlerRegistry: !!config.handlerRegistry,
|
||||
handlerRegistryType: config.handlerRegistry ? typeof config.handlerRegistry : 'undefined',
|
||||
configKeys: Object.keys(config),
|
||||
|
|
@ -176,6 +180,9 @@ export class Queue {
|
|||
]);
|
||||
|
||||
const isPaused = await this.bullQueue.isPaused();
|
||||
|
||||
// Get actual active worker count from BullMQ
|
||||
const activeWorkerCount = await this.getActiveWorkerCount();
|
||||
|
||||
return {
|
||||
waiting: waiting.length,
|
||||
|
|
@ -184,7 +191,7 @@ export class Queue {
|
|||
failed: failed.length,
|
||||
delayed: delayed.length,
|
||||
paused: isPaused,
|
||||
workers: this.workers.length,
|
||||
workers: activeWorkerCount, // Use BullMQ's tracked count instead of local array
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -307,11 +314,13 @@ export class Queue {
|
|||
concurrency,
|
||||
maxStalledCount: 3,
|
||||
stalledInterval: 30000,
|
||||
// Add a name to identify the worker
|
||||
name: `${this.serviceName || 'unknown'}_worker_${i}`,
|
||||
});
|
||||
|
||||
this.logger.info(`Starting worker ${i + 1}/${workerCount} for queue`, {
|
||||
queueName: this.queueName,
|
||||
workerId: i,
|
||||
workerName: worker.name,
|
||||
concurrency,
|
||||
});
|
||||
|
||||
|
|
@ -438,4 +447,69 @@ export class Queue {
|
|||
getWorkerCount(): number {
|
||||
return this.workers.length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get active workers from BullMQ
|
||||
* This uses BullMQ's built-in worker tracking
|
||||
*/
|
||||
async getActiveWorkers(): Promise<any[]> {
|
||||
try {
|
||||
const workers = await this.bullQueue.getWorkers();
|
||||
return workers;
|
||||
} catch (error) {
|
||||
this.logger.error('Failed to get active workers', {
|
||||
queueName: this.queueName,
|
||||
error
|
||||
});
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get count of active workers from BullMQ
|
||||
*/
|
||||
async getActiveWorkerCount(): Promise<number> {
|
||||
try {
|
||||
const workers = await this.bullQueue.getWorkers();
|
||||
return workers.length;
|
||||
} catch (error) {
|
||||
this.logger.error('Failed to get active worker count', {
|
||||
queueName: this.queueName,
|
||||
error
|
||||
});
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get detailed worker information
|
||||
*/
|
||||
async getWorkerDetails(): Promise<Array<{
|
||||
id: string;
|
||||
name?: string;
|
||||
addr?: string;
|
||||
age?: number;
|
||||
idle?: number;
|
||||
started?: number;
|
||||
}>> {
|
||||
try {
|
||||
const workers = await this.bullQueue.getWorkers();
|
||||
return workers.map(worker => ({
|
||||
id: worker.id || 'unknown',
|
||||
name: worker.name,
|
||||
addr: worker.addr,
|
||||
age: typeof worker.age === 'string' ? parseInt(worker.age) : worker.age,
|
||||
idle: typeof worker.idle === 'string' ? parseInt(worker.idle) : worker.idle,
|
||||
started: typeof worker.started === 'string' ? parseInt(worker.started) : worker.started,
|
||||
}));
|
||||
} catch (error) {
|
||||
this.logger.error('Failed to get worker details', {
|
||||
queueName: this.queueName,
|
||||
error
|
||||
});
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue