@@ -10,9 +10,9 @@ import {
10
10
import {
11
11
Queue ,
12
12
Scheduler ,
13
- MultiWorker ,
14
13
type ParsedJob ,
15
14
type Job ,
15
+ Worker ,
16
16
} from "node-resque" ;
17
17
import { randomUUID } from "crypto" ;
18
18
import { Initializer } from "../classes/Initializer" ;
@@ -97,86 +97,79 @@ export class Resque extends Initializer {
97
97
if ( api . resque . scheduler ) return api . resque . scheduler . end ( ) ;
98
98
} ;
99
99
100
- startMultiWorker = async ( ) => {
101
- api . resque . multiWorker = new MultiWorker (
102
- {
103
- connection : { redis : api . redis . redis } ,
104
- queues : Array . isArray ( config . tasks . queues )
105
- ? config . tasks . queues
106
- : await config . tasks . queues ( ) ,
107
- timeout : config . tasks . timeout ,
108
- checkTimeout : config . tasks . checkTimeout ,
109
- minTaskProcessors : config . tasks . minTaskProcessors ,
110
- maxTaskProcessors : config . tasks . maxTaskProcessors ,
111
- maxEventLoopDelay : config . tasks . maxEventLoopDelay ,
112
- } ,
113
- api . resque . jobs ,
114
- ) ;
115
-
116
- // normal worker emitters
117
- api . resque . multiWorker . on ( "start" , ( workerId ) => {
118
- logger . info ( `[resque:worker] started, ${ workerId } ` ) ;
119
- } ) ;
120
- api . resque . multiWorker . on ( "end" , ( workerId ) => {
121
- logger . info ( `[resque:worker] ended, ${ workerId } ` ) ;
122
- } ) ;
123
- api . resque . multiWorker . on ( "cleaning_worker" , ( workerId , worker , pid ) => {
124
- logger . debug (
125
- `[resque:worker] cleaning worker, ${ workerId } , ${ worker } , ${ pid } ` ,
126
- ) ;
127
- } ) ;
128
- api . resque . multiWorker . on ( "poll" , ( workerId , queue ) => {
129
- logger . debug ( `[resque:worker] polling, ${ workerId } , ${ queue } ` ) ;
130
- } ) ;
131
- api . resque . multiWorker . on ( "job" , ( workerId , queue , job : ParsedJob ) => {
132
- logger . debug (
133
- `[resque:worker] job acquired, ${ workerId } , ${ queue } , ${ job . class } , ${ JSON . stringify ( job . args [ 0 ] ) } ` ,
100
+ startWorkers = async ( ) => {
101
+ let id = 0 ;
102
+
103
+ while ( id < config . tasks . taskProcessors ) {
104
+ const worker = new Worker (
105
+ {
106
+ connection : { redis : api . redis . redis } ,
107
+ queues : Array . isArray ( config . tasks . queues )
108
+ ? config . tasks . queues
109
+ : await config . tasks . queues ( ) ,
110
+ timeout : config . tasks . timeout ,
111
+ name : `worker-${ id } ` ,
112
+ } ,
113
+ api . resque . jobs ,
134
114
) ;
135
- } ) ;
136
- api . resque . multiWorker . on (
137
- "reEnqueue" ,
138
- ( workerId , queue , job : ParsedJob , plugin ) => {
115
+
116
+ // normal worker emitters
117
+ worker . on ( "start" , ( ) => {
118
+ logger . info ( `[resque:worker:${ id } ] started` ) ;
119
+ } ) ;
120
+ worker . on ( "end" , ( ) => {
121
+ logger . info ( `[resque:worker:${ id } ] ended` ) ;
122
+ } ) ;
123
+ worker . on ( "cleaning_worker" , ( ) => {
124
+ logger . debug ( `[resque:worker:${ id } ] cleaning worker` ) ;
125
+ } ) ;
126
+ worker . on ( "poll" , ( queue ) => {
127
+ logger . debug ( `[resque:worker:${ id } ] polling, ${ queue } ` ) ;
128
+ } ) ;
129
+ worker . on ( "job" , ( queue , job : ParsedJob ) => {
139
130
logger . debug (
140
- `[resque:worker] job reEnqueue, ${ workerId } , ${ queue } , ${ job . class } , ${ JSON . stringify ( job . args [ 0 ] ) } ` ,
131
+ `[resque:worker: ${ id } ] job acquired , ${ queue } , ${ job . class } , ${ JSON . stringify ( job . args [ 0 ] ) } ` ,
141
132
) ;
142
- } ,
143
- ) ;
144
- api . resque . multiWorker . on ( "pause" , ( workerId ) => {
145
- logger . debug ( `[resque:worker] paused, ${ workerId } ` ) ;
146
- } ) ;
133
+ } ) ;
134
+ worker . on ( "reEnqueue" , ( queue , job : ParsedJob , plugin ) => {
135
+ logger . debug (
136
+ `[resque:worker:${ id } ] job reEnqueue, ${ queue } , ${ job . class } , ${ JSON . stringify ( job . args [ 0 ] ) } ` ,
137
+ ) ;
138
+ } ) ;
139
+ worker . on ( "pause" , ( ) => {
140
+ logger . debug ( `[resque:worker:${ id } ] paused` ) ;
141
+ } ) ;
147
142
148
- api . resque . multiWorker . on ( "failure" , ( workerId , queue , job , failure ) => {
149
- logger . warn (
150
- `[resque:worker] job failed, ${ workerId } , ${ queue } , ${ job . class } , ${ JSON . stringify ( job ?. args [ 0 ] ?? { } ) } : ${ failure } ` ,
151
- ) ;
152
- } ) ;
153
- api . resque . multiWorker . on ( "error" , ( error , workerId , queue , job ) => {
154
- logger . warn (
155
- `[resque:worker] job error, ${ workerId } , ${ queue } , ${ job ?. class } , ${ JSON . stringify ( job ?. args [ 0 ] ?? { } ) } : ${ error } ` ,
156
- ) ;
157
- } ) ;
143
+ worker . on ( "failure" , ( queue , job , failure , duration ) => {
144
+ logger . warn (
145
+ `[resque:worker: ${ id } ] job failed, ${ queue } , ${ job . class } , ${ JSON . stringify ( job ?. args [ 0 ] ?? { } ) } : ${ failure } ( ${ duration } ms) ` ,
146
+ ) ;
147
+ } ) ;
148
+ worker . on ( "error" , ( error , queue , job ) => {
149
+ logger . warn (
150
+ `[resque:worker: ${ id } ] job error, ${ queue } , ${ job ?. class } , ${ JSON . stringify ( job ?. args [ 0 ] ?? { } ) } : ${ error } ` ,
151
+ ) ;
152
+ } ) ;
158
153
159
- api . resque . multiWorker . on (
160
- "success" ,
161
- ( workerId , queue , job : ParsedJob , result , duration ) => {
154
+ worker . on ( "success" , ( queue , job : ParsedJob , result , duration ) => {
162
155
logger . info (
163
- `[resque:worker] job success, ${ workerId } , ${ queue } , ${ job . class } , ${ JSON . stringify ( job . args [ 0 ] ) } | ${ JSON . stringify ( result ) } (${ duration } ms)` ,
156
+ `[resque:worker: ${ id } ] job success ${ queue } , ${ job . class } , ${ JSON . stringify ( job . args [ 0 ] ) } | ${ JSON . stringify ( result ) } (${ duration } ms)` ,
164
157
) ;
165
- } ,
166
- ) ;
158
+ } ) ;
167
159
168
- api . resque . multiWorker . on ( "multiWorkerAction" , ( verb , delay ) => {
169
- logger . debug ( `[resque:worker] multiworker ${ verb } , ${ delay } ` ) ;
170
- } ) ;
160
+ api . resque . workers . push ( worker ) ;
161
+ id ++ ;
162
+ }
171
163
172
- if ( config . tasks . minTaskProcessors > 0 ) {
173
- api . resque . multiWorker . start ( ) ;
164
+ for ( const worker of api . resque . workers ) {
165
+ await worker . connect ( ) ;
166
+ await worker . start ( ) ;
174
167
}
175
168
} ;
176
169
177
- stopMultiWorker = async ( ) => {
178
- if ( api . resque . multiWorker && config . tasks . minTaskProcessors > 0 ) {
179
- return api . resque . multiWorker . stop ( ) ;
170
+ stopWorkers = async ( ) => {
171
+ for ( const worker of api . resque . workers ) {
172
+ await worker . end ( ) ;
180
173
}
181
174
} ;
182
175
@@ -241,37 +234,33 @@ export class Resque extends Initializer {
241
234
} ;
242
235
243
236
async initialize ( ) {
244
- const resqueContainer = { jobs : await this . loadJobs ( ) } as {
237
+ const resqueContainer = {
238
+ jobs : await this . loadJobs ( ) ,
239
+ workers : [ ] as Worker [ ] ,
240
+ } as {
245
241
queue : Queue ;
246
242
scheduler : Scheduler ;
247
- multiWorker : MultiWorker ;
243
+ workers : Worker [ ] ;
248
244
jobs : Awaited < ReturnType < Resque [ "loadJobs" ] > > ;
249
245
} ;
250
246
251
247
return resqueContainer ;
252
248
}
253
249
254
250
async start ( ) {
255
- if (
256
- config . tasks . minTaskProcessors === 0 &&
257
- config . tasks . maxTaskProcessors > 0
258
- ) {
259
- config . tasks . minTaskProcessors = 1 ;
260
- }
261
-
262
251
await this . startQueue ( ) ;
263
252
264
253
if ( api . runMode === RUN_MODE . SERVER ) {
265
254
await this . startScheduler ( ) ;
266
- await this . startMultiWorker ( ) ;
255
+ await this . startWorkers ( ) ;
267
256
}
268
257
}
269
258
270
259
async stop ( ) {
271
260
await this . stopQueue ( ) ;
272
261
273
262
if ( api . runMode === RUN_MODE . SERVER ) {
274
- await this . stopMultiWorker ( ) ;
263
+ await this . stopWorkers ( ) ;
275
264
await this . stopScheduler ( ) ;
276
265
}
277
266
}
0 commit comments