весенняя асинхронная задача получить использование очереди перед вызовом - PullRequest
1 голос
/ 26 июня 2019

Я использую асинхронную задачу для обработки больших запросов, мои данные ниже

@Configuration
@EnableAsync
public class AsyncConfiguration 
{
    @Bean(name = "asyncExecutor")
    public Executor asyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(100);
        executor.setThreadNamePrefix("AsynchThread-");
        executor.initialize();
        return executor;
    }
}


@Service
public class AsyncService {
    @Async("Executor")
    public void  processData(User user) throws InterruptedException 
    {

        /* my business logic for each user*/

        return  ;
    }

}

Здесь я получаю список пользователей, он может содержать 50 пользователей, поэтому перед публикацией в асинхронной задаче я хочу знать, что у меня достаточно емкости очереди для хранения 50 потоков, если нет, я должен вернуться к вызывающей стороне, говоря, что мой сервер занят.

@RequestMapping(value = "/users", method = RequestMethod.POST)
    public void postAllUsers(@RequestBody List<User>  users) throws InterruptedException, ExecutionException 
    {

        for (List<User> user: users) 
    {
        try {
            service.processData(user);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    }

Так как узнать текущее использование очереди?

...