1010import { flags , BaseCommand } from '@adonisjs/core/ace'
1111import { resolveAdapters , resolveJobFactory } from '../src/utils.js'
1212import type { CommandOptions } from '@adonisjs/core/types/ace'
13- import type { QueueConfig } from '../src/types/main.js'
13+ import type { QueueConfig , QueueManagerConfig } from '../src/types/main.js'
1414
1515export default class QueueWork extends BaseCommand {
1616 static commandName = 'queue:work'
@@ -30,6 +30,8 @@ export default class QueueWork extends BaseCommand {
3030 async run ( ) {
3131 const { Worker } = await import ( '@boringnode/queue' )
3232 const config = this . app . config . get < QueueConfig > ( 'queue' )
33+ const queueManager = await this . app . container . make ( 'queue.manager' )
34+ const logger = await this . app . container . make ( 'logger' )
3335
3436 /**
3537 * Commit the router to ensure all routes are registered.
@@ -45,12 +47,23 @@ export default class QueueWork extends BaseCommand {
4547 this . logger . info ( `Starting worker for queues: ${ queues . join ( ', ' ) } ` )
4648 const jobFactory = resolveJobFactory ( config , this . app )
4749
48- const worker = new Worker ( {
50+ const workerConfig = {
4951 ...config ,
5052 adapters : resolvedAdapters ,
5153 jobFactory,
52- ...( this . concurrency && { concurrency : this . concurrency } ) ,
53- } )
54- await worker . start ( queues )
54+ logger : config . logger ?? logger ,
55+ worker : {
56+ ...config . worker ,
57+ ...( this . concurrency !== undefined ? { concurrency : this . concurrency } : { } ) ,
58+ } ,
59+ } satisfies QueueManagerConfig
60+
61+ const worker = new Worker ( workerConfig )
62+
63+ try {
64+ await worker . start ( queues )
65+ } finally {
66+ await queueManager . destroy ( )
67+ }
5568 }
5669}
0 commit comments