Я хотел ограничить количество возможных тем, не теряя ни одного сообщения.Это требование не было выполнено из существующих ответов, и я нашел другой способ сделать это.Следовательно, разместив его как ответ:
, я создал Боб Исполнителя следующим образом:
@Bean(name = "CustomAsyncExecutor")
public Executor customThreadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(5);
executor.setQueueCapacity(0);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.setThreadNamePrefix("Async_Thread_");
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.initialize();
return executor;
}
И затем использовал
@Async("CustomAsyncExecutor")
public void methodName(){
....
}
Учитывая, что когдапотоки заняты, и когда очередь заполнена, новые задачи отклоняются,
executor.setRejectedExecutionHandler (new ThreadPoolExecutor.CallerRunsPolicy ())
мне помогло, когда мои 5 потоковзаняты, мой поток invoker выполнит задачу, и так как мой поток invoker находится в асинхронной функции, он не будет выполнять никаких новых задач.Таким образом, я не потеряю свои задачи без увеличения размера очереди.