#java #spring #spring-boot #tomcat #microservices
Вопрос:
Требование — Есть ли какой-либо способ с помощью конфигурации/пользовательской логики предоставить конфигурацию портов черного списка, чтобы служба загрузки sprint никогда не выбирала эти порты при запуске, это необходимо, поскольку некоторые из наших устаревших служб работают в выделенных портах, и эти службы запускаются после запуска нашего приложения spring boot, если приложение spring boot выберет эти порты, это приведет к конфликту.
пример : мы ищем что-то вроде приведенного ниже , где мы можем исключить эти порты, чтобы они никогда не были выбраны приложением spring boot. исключить.порты= 18080,28080
Комментарии:
1. Разве в этом случае недостаточно указать порт, который вы хотите использовать?
2. Нет, ты не можешь этого сделать. Выбор случайного номера порта производится ОС из диапазона эфемерных портов, когда сокет привязан, а затем Tomcat запрашивает ОС, какой из них был выбран. Если для других ваших служб требуются фиксированные порты, а сервер принадлежит вам, то почему бы также не исправить порт вашей службы spring boot?
3. Мы не хотим жестко кодировать порт , причина в том, чтобы облегчить HA(Высокая доступность — если в определенный день больше нагрузки, мы можем отключить несколько экземпляров одной и той же службы) . Мое решение: Вы думаете, что передачи порта в качестве аргумента будет достаточно , я могу создать небольшое внешнее задание ( запускаемое перед приложением spring boot), задача которого состоит в том, чтобы найти открытый порт ( в редких случаях, если случайный найденный порт находится в нашем списке исключенных портов, он будет искать снова, пока его не будет в списке исключенных) и передать это в качестве аргумента при запуске приложения Spring boot.
4. Да, передача порта в командной строке была бы для вас приемлемым компромиссом. Не включайте эфемерный диапазон этого сервера в свой поиск, потому что они случайным образом выбраны для использования в качестве локального конца подключений к серверу, и вы рискуете столкнуться с состоянием гонки между вашим тестом для использования и запуском сервера.