Spring Boot помещает запрос в очередь и ожидает завершения другого запроса - PullRequest
3 голосов
/ 18 марта 2019

У меня есть приложение в Spring Boot, когда я загружаю веб-страницу, она попадает в службу и получает от нее результат. Ответ занимает некоторое время (10-15) секунд из-за поиска в базе данных. Поэтому, если я закрываю эту веб-страницу и открываю другой экземпляр той же страницы, Spring Boot помещает этот запрос в очередь и ожидает завершения первого запроса, даже если я закрыл эту веб-страницу. Также, если в очереди слишком много запросов, сервер tomcat падает.

На данный момент я изменил потоки Tomcat в application.properties как

server.tomcat.max-threads=20

Так что я могу сделать его многопоточным?

Note : The number of requests can be more than 20 also

Я использую Spring Boot 1.5.2 для этого приложения

РЕДАКТИРОВАТЬ: У меня также есть одно подобное приложение, работающее в Spring boot 2, и у этого приложения такой проблемы нет. Логика приложения практически одинакова для обоих, но запросы второго приложения занимают немного меньше времени.

1 Ответ

0 голосов
/ 18 марта 2019

Лучший дизайн будет означать службу с двумя конечными точками:

  1. POST-URL, который позволяет пользователю отправлять запрос на сервер и получать маркер ключа обратно.Сервер помещает сообщение в очередь и возвращает токен.
  2. GET URL, который позволяет пользователю отправить токен и либо получить ответ обратно, либо ничего, если он не вернулся из очереди.

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

Если поиск в вашей базе данных занимает 10-15 секунд, вам следует подумать о его ускорении.У вас есть соответствующие индексы?Перегородки?Это реляционная база данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...