Есть ограничение на запуск приложения. Как запретить запрос endpoint — y который обращается к API. Но в случае обращения к БД запрос должен работать?
Всем привет!
Есть задача. Я блокирую запуск приложения прослушивая порт через ServerSocket . Но тем самым блокирую любое обращение от клиента, до тех пор пока идет процесс обновления.
Решение: Могу ли я достичь ситуации где только определенные endpoint блокировался для повторного запуска, например endpoint который обращается к сторонним API. Но мог бы обращаться к базе для получения данных как например.
Не могли бы подсказать, может у кого есть идеи?
Всем большое спасибо.
Создайте задачу блокировки, пока она не выполнена, отправляется сообщение о незавершенном статусе.
Как реализовать? Думайте сами. Можно словарик повесить, можно в базе сохранять, можно очередь использовать
Спасибо за ответ!. Это уже сделано, есть контроллер где при запросе происходит обновление и блокировка по порту. Но я бы хотел получать данные с базы от другого контроллера. но так как блокировка происходит по локальному порту я вынужден ждать завершения обновления данных.
Я бы хотел избежать этого
Александр Батула, Приведите сценарии при блокировке и при нормальном поведении.
Например:
get /api/srv - что то происходит
По идее в этом контроллере может быть следующий псевдокод
1. проверка статуса и установка блокировки
2. если нужно выполнить долгую задачу запускаем отдельный поток
3. выполняем логику не связанную с блокировкой или возвращаем статус database upgrade, please try later
Владимир Коротенко, Добрый день!
Пример:
get/api/update - идет обращение к API и обновление данных. В этот момент мне нужно блокировать работу до тех пор пока данные не обновятся.
Я делаю это с помощью ServerSoket делаю блокировку по локальному порту.
Далее идет другой запрос . get/users/all - получаю всех пользователей.
И уже этот запрос я не хочу блокировать. - Но так как я блокирую порт - блокируется все до тех пор пока данные не обновятся.
Я бы хотел этого избежать.
Александр Батула,
Вы немного неправильно делаете
1. ServerSoket открывает порт и слушает "Эфир"
2. Внутри должен быть какой то обработчик, который например разбирает запросы (маршрутизатор)
3. Если пришел запрос get/api/update то вызывается обработчик OnOupdate который СРАЗУ возвращает свой статус. AvaliableUpdates | InProgress | Error
4. Вызывается следующий обработчик OnUsersAll например
5. Вызывается обработчик по умолчанию
Все обработчики должны возвращать свой статус или результат сразу, а клиент должен переспросить, не завершилось ли задание.
Впрочем есть уже готовые решения по реализации всего этого.
С помощью Java Security Manager можно избирательно перекрыть приложению возможность прослушивать порты листенера, или создавать самому соединения. Но этот менеджер не различает ендпоинт и базу. Ему нужны цифры вида host:port или их комбинации и рулы разрешений на соотв действия.