Java Spring Framework: несколько потоков и TaskExecutor

Настройка: веб-сервер Apache Tomcat 8 /Java Spring Framework/MVC

Предыстория: у меня к нескольким серверам подключен балансировщик нагрузки. Каждый раз, когда балансировщик нагрузки перенаправляет запрос на веб-сервер, сервер отправляет запрос в удаленную очередь.

Теперь я пытаюсь настроить несколько потоков в своем веб-приложении, чтобы эти потоки могли использоваться для обработки запросов в удаленной очереди (извлечь их из очереди, а затем начать работать с ними).

В прошлом я работал только с одним экземпляром сервера. Сервер будет получать запросы непосредственно от внешнего интерфейса в контроллере, а затем он будет генерировать несколько потоков для параллельной обработки этих запросов. Все вызовы (создание пула потоков и другие) запускаются после получения первого запроса (поступающие запросы -> Создать потоки -> Обрабатывать запросы).

Проблема: теперь вместо создания потоков после поступления запроса я хочу создать потоки после запуска веб-приложения, чтобы оно могло сразу же начать получать запросы из удаленной очереди. Проще говоря, я хотел бы отделить создание потоков от обработки запросов. В идеале я хотел бы, чтобы эти потоки (фиксированное число) работали все время, вытягивая запрос из очереди всякий раз, когда они простаивают. А в контроллере, когда сервер получает запрос, я просто отправляю его в очередь.

Я впервые работаю со средой Spring, и поэтому я не уверен, что будет лучшим подходом для выполнения того, что мне нужно. Контроллер (метод, который обрабатывает входящий запрос) был единственной точкой входа в программу, которую я знаю. Поэтому я не знаю, как и где я могу создать эти темы при запуске приложения. Я хочу, чтобы потоки были очень надежными, потому что они будут выполнять тяжелую обработку запросов.

Ниже приведены некоторые идеи, которые я выдвинул: - Я думаю об использовании TaskExecutor для создания потоков, которые мне нужны при загрузке контекста (не уверен, что это хороший и надежный подход). Если бы я использовал TaskExecutor, как мне управлять жизненным циклом этих потоков и других ресурсов? - Во время моих исследований я также наткнулся на WorkManager. Я не уверен, что он делает то, что мне нужно.

Любые предложения и указатели приветствуются!

1 ответ

Решение

Я не думаю, что вам нужно беспокоиться о темах самостоятельно. Spring имеет большую поддержку для создания и потребления очередей сообщений. Просто подключите прослушиватель сообщений, и я думаю, что он должен начать использовать эти сообщения.

Другие вопросы по тегам