@@ -255,11 +255,29 @@ private void initializeQueue() {
255
255
defaultTaskExecutor = true ;
256
256
taskExecutor = createDefaultTaskExecutor (queueDetails );
257
257
} else {
258
- initializeThreadMap (queueDetails , taskExecutor , false , queueDetails . size () );
258
+ initializeThreadMapForNonDefaultExecutor (queueDetails );
259
259
}
260
260
initializeRunningQueueState ();
261
261
}
262
262
263
+ private void initializeThreadMapForNonDefaultExecutor (
264
+ List <QueueDetail > registeredActiveQueueDetail ) {
265
+ List <QueueDetail > queueDetails =
266
+ registeredActiveQueueDetail .stream ()
267
+ .filter (e -> !e .isSystemGenerated ())
268
+ .collect (Collectors .toList ());
269
+ List <QueueDetail > withoutConcurrency = new ArrayList <>();
270
+ for (QueueDetail queueDetail : queueDetails ) {
271
+ if (queueDetail .getConcurrency ().isValid ()) {
272
+ addExecutorForConcurrencyBasedQueue (queueDetail , taskExecutor , false );
273
+ } else {
274
+ withoutConcurrency .add (queueDetail );
275
+ }
276
+ }
277
+ initializeThreadMap (
278
+ withoutConcurrency , taskExecutor , false , getWorkersCount (withoutConcurrency .size ()));
279
+ }
280
+
263
281
private void initialize () {
264
282
initializeQueue ();
265
283
this .postProcessingHandler =
@@ -296,9 +314,12 @@ private void initializeThreadMap(
296
314
AsyncTaskExecutor taskExecutor ,
297
315
boolean defaultExecutor ,
298
316
int workersCount ) {
317
+ if (queueDetails .isEmpty ()) {
318
+ return ;
319
+ }
320
+ QueueThreadPool pool = new QueueThreadPool (taskExecutor , defaultExecutor , workersCount );
299
321
for (QueueDetail queueDetail : queueDetails ) {
300
- queueThreadMap .put (
301
- queueDetail .getName (), new QueueThreadPool (taskExecutor , defaultExecutor , workersCount ));
322
+ queueThreadMap .put (queueDetail .getName (), pool );
302
323
}
303
324
}
304
325
@@ -332,16 +353,19 @@ private AsyncTaskExecutor createNonConcurrencyBasedExecutor(
332
353
return executor ;
333
354
}
334
355
356
+ private void addExecutorForConcurrencyBasedQueue (
357
+ QueueDetail queueDetail , AsyncTaskExecutor executor , boolean defaultTaskExecutor ) {
358
+ int maxJobs = queueDetail .getConcurrency ().getMax ();
359
+ QueueThreadPool threadPool = new QueueThreadPool (executor , defaultTaskExecutor , maxJobs );
360
+ queueThreadMap .put (queueDetail .getName (), threadPool );
361
+ }
362
+
335
363
private void createExecutor (QueueDetail queueDetail ) {
336
364
Concurrency concurrency = queueDetail .getConcurrency ();
337
- int queueCapacity = 0 ;
338
- int maxJobs = concurrency .getMax ();
339
365
int corePoolSize = concurrency .getMin ();
340
366
int maxPoolSize = concurrency .getMax ();
341
- AsyncTaskExecutor executor =
342
- createTaskExecutor (queueDetail , corePoolSize , maxPoolSize , queueCapacity );
343
- QueueThreadPool threadPool = new QueueThreadPool (executor , true , maxJobs );
344
- queueThreadMap .put (queueDetail .getName (), threadPool );
367
+ AsyncTaskExecutor executor = createTaskExecutor (queueDetail , corePoolSize , maxPoolSize );
368
+ addExecutorForConcurrencyBasedQueue (queueDetail , executor , true );
345
369
}
346
370
347
371
public AsyncTaskExecutor createDefaultTaskExecutor (
@@ -362,15 +386,14 @@ public AsyncTaskExecutor createDefaultTaskExecutor(
362
386
}
363
387
364
388
private AsyncTaskExecutor createTaskExecutor (
365
- QueueDetail queueDetail , int corePoolSize , int maxPoolSize , int queueCapacity ) {
389
+ QueueDetail queueDetail , int corePoolSize , int maxPoolSize ) {
366
390
String name = ThreadUtils .getWorkerName (queueDetail .getName ());
367
- return ThreadUtils .createTaskExecutor (
368
- name , name + "-" , corePoolSize , maxPoolSize , queueCapacity );
391
+ return ThreadUtils .createTaskExecutor (name , name + "-" , corePoolSize , maxPoolSize , 0 );
369
392
}
370
393
371
394
private List <QueueDetail > getQueueDetail (String queue , MappingInformation mappingInformation ) {
372
395
int numRetry = mappingInformation .getNumRetry ();
373
- if (!mappingInformation .getDeadLetterQueueName (). isEmpty ( ) && numRetry == -1 ) {
396
+ if (!StringUtils . isEmpty ( mappingInformation .getDeadLetterQueueName ()) && numRetry == -1 ) {
374
397
log .warn (
375
398
"Dead letter queue {} is set but retry is not set" ,
376
399
mappingInformation .getDeadLetterQueueName ());
@@ -403,12 +426,13 @@ private List<QueueDetail> getQueueDetail(String queue, MappingInformation mappin
403
426
.priority (priority )
404
427
.priorityGroup (priorityGroup )
405
428
.build ();
429
+ List <QueueDetail > queueDetails ;
406
430
if (queueDetail .getPriority ().size () <= 1 ) {
407
- return Collections .singletonList (queueDetail );
431
+ queueDetails = Collections .singletonList (queueDetail );
432
+ } else {
433
+ queueDetails = queueDetail .expandQueueDetail (true , -1 );
408
434
}
409
- return queueDetail .expandQueueDetail (
410
- rqueueConfig .isAddDefaultQueueWithQueueLevelPriority (),
411
- rqueueConfig .getDefaultQueueWithQueueLevelPriority ());
435
+ return queueDetails ;
412
436
}
413
437
414
438
@ Override
@@ -450,6 +474,7 @@ protected void doStart() {
450
474
451
475
private Map <String , QueueThreadPool > getQueueThreadMap (
452
476
String groupName , List <QueueDetail > queueDetails ) {
477
+ // this happens only for queue having priorities like critical:10,high:5,low:3
453
478
QueueThreadPool queueThreadPool = queueThreadMap .get (groupName );
454
479
if (queueThreadPool != null ) {
455
480
return queueDetails .stream ()
0 commit comments