@Germanjon

Можно ли сделать динамическое добавление WebAPI?

Добрый день, уважаемые коллеги.

Вопрос от полного новичка: можно ли добавлять API в Java Spring приложение без перезапуска?

Ситуация:
1. Есть программа, написанная на Java Spring, которая принимает запросы по 20+ API и в зависимости от набора правил перенаправляет (проксирует) их в сторонние системы/сервисы. API вида https://software/servicename/v1.
2. При добавлении нового сервиса или добавлении новой версии (по сути - добавление или изменение API для сторонних получателей) приходится перезапускать систему.

Что хотелось бы:
В какой-либо папке создаются XML или аналогичные файлы с описанием правил поведения для запроса. Приложение регулярно парсит их и в случае появления нового - автоматически начинает "слушать" новое API.

Вопрос - можно ли реализовать такое или аналогичное? В какую сторону копать?
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 2
Vamp
@Vamp
1. Blue-green deployment. Запускаете два инстанса своего приложения. Один из них условно называется green, другой blue. Ставите перед ними nginx/haproxy и настраиваете проксирование всех запросов на green инстанс. Когда приходит время изменений, делаете их на blue инстансе, рестартите его и перенастраиваете проксирование всего трафика с green инстанса на blue. В следующий раз делаете то же самое, но с green инстансом.

Этот вариант не требует ни строчки изменений в коде.

2. В бесконечном цикле с паузой в 1 сек между итерациями читаете файлы с конфигурацией из нужной папки. Затем останавливаете сервисы, для которых не нашлось определения в конфиге, запускаете сервисы, для которых определение есть и перезапускате сервисы, у которых конфиг изменился. Это уже реализовано в spring boot externalized configuration, но ничто не мешает вам реализовать это руками.
Ответ написан
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
Не знаю поможет ли вам это, но нужный вам функционал есть в составе Spring Cloud.
Вам нужно следующее:
- Spring Configuration Server, который стартует первым и подгружает конфигурации для других микросервисов.
- (Разумеется, что вам также понадобятся Eureka Server & Spring Gateway API)
- Далее вам необходимо добавить Spring Cloud Bus, который динамически обновляет конфиги.
Потом происходит примерно следующее:
Вы заливаете ваши новые конфиги либо в гит репозиторий, либо локально. При наличии новой конфигурации они доставляются через AMQР к соответствующему микросервису.
KHtD0FG.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
02 дек. 2021, в 10:31
20000 руб./за проект
02 дек. 2021, в 10:30
5000 руб./за проект
02 дек. 2021, в 10:17
3000 руб./за проект