Установка: Apache Tomcat 8 Веб-сервер/Java Spring Framework/MVCJava Spring Framework: Множественные потоки и TaskExecutor
Справочная информация: У меня есть несколько серверов прикрепили балансировки нагрузки. Каждый раз, когда балансировщик нагрузки отправляет запрос на веб-сервер, сервер перенаправляет запрос в удаленную очередь.
Теперь я пытаюсь настроить несколько потоков в своем веб-приложении, чтобы эти потоки могли использоваться для обработки запросов в удаленной очереди (извлекать их из очереди и затем начинать работать с ними).
В прошлом я работал только с экземпляром одного сервера. Сервер будет получать запросы непосредственно из передней части Контроллера, а затем он будет генерировать несколько потоков для параллельной обработки запросов тезисов. Все вызовы (создание пула потоков и другие) запускаются после получения первого запроса (запросы, входящие в -> Создать потоки -> Обработать запросы).
Проблема: теперь, вместо того, чтобы создавать потоки после ввода запроса, я хочу создать потоки после запуска веб-приложения, чтобы он сразу начал вытаскивать запросы из удаленной очереди. Проще говоря, я хотел бы отделить создание потоков от обработки запросов. В идеале, я хотел бы, чтобы эти потоки (фиксированное число из них) работали все время, вытягивая запрос из очереди всякий раз, когда они простаивают. И в контроллере, когда сервер когда-либо получает запрос, я просто отправлю его в очередь.
Это мой первый опыт работы с фреймворком Spring, и поэтому я не уверен, что было бы лучшим подходом для того, чтобы делать то, что мне нужно. Контроллер (метод, который обрабатывает входящий запрос) был единственной точкой входа в программу, о которой я знаю. Поэтому я не знаю, как и где я могу создавать эти потоки при запуске приложения. Я хочу, чтобы потоки были очень надежными, потому что они собираются сделать тяжелую обработку запросов.
Ниже приведены некоторые из идей, которые я придумал: - Я думаю об использовании TaskExecutor для создания потоков, которые мне нужны при загрузке контекста (не уверен, что это хороший и надежный подход). Если я должен использовать TaskExecutor, как мне управлять жизненным циклом этих потоков и других ресурсов? - Во время моих исследований я также пришел на работу WorkManager. Я не уверен, что он делает то, что мне нужно.
Любые предложения и указатели приветствуются!
По сути, я хочу создать эти потоки и использовать их для обработки запросов вне нормального рабочего потока веб-приложений (прием запроса и возвращаемого ответа). – Smirk