Зарегистрируйте несколько экземпляров клиента Spring Boot Eureka с одного хоста
ОБНОВИТЬ
README вэто репо был обновлен, чтобы продемонстрировать решение в принятом ответе.
Я работаю с простым примером регистрации и обнаружения службы Spring Boot Eureka на основеэто руководство.
Если я запускаю один экземпляр клиента, он регистрируется должным образом и может видеть себя черезDiscoveryClient
, Если я запускаю второй экземпляр с другим именем, он также работает.
Но если я запускаю два экземпляра с одинаковыми именами, на панели инструментов отображается только один запущенный экземпляр, аDiscoveryClient
показывает только второй экземпляр.
Когда я убиваю 2-й экземпляр, 1-й снова виден через панель управления и клиент обнаружения.
Вот еще некоторые подробности о шагах, которые я делаю, и о том, что я вижу:
Эврика сервер
Запустите сервер
cd eureka-server
mvn spring-boot:run
Посетите панель инструментов Eureka наHTTP: // локальный: 8761
Обратите внимание, что «Экземпляры» еще не зарегистрированы
Эврика Клиент
Запустить клиента
cd eureka-client
mvn spring-boot:run
Посетите клиента напрямую по адресуHTTP: // локальный: 8080 /
/whoami
конечная точка покажет клиенту самопознание его имени приложения и порта
{
"springApplicationName":"eureka-client",
"serverPort":"8080"
}
/instances
Обновление конечной точки займет до минуты, но в конечном итоге должно отобразить все экземплярыeureka-client
которые были зарегистрированы в Eureka Discovery Client.
[
{
"host":"hostname",
"port":8080,
"serviceId":"EUREKA-CLIENT",
"uri":"http://hostname:8080",
"secure":false
}
]
Вы также можете посетить Eureka Dashoboard снова и увидеть его там.
Раскрутить другого клиента с другим именем
Вы можете увидеть, что другой клиент будет зарегистрирован, выполнив следующие действия:
cd eureka-client
mvn spring-boot:run -Dspring.application.name=foo -Dserver.port=8081
/whoami
конечная точка покажет имяfoo
и порт8081
.
Через минуту или около того/instances
конечная точка покажет информацию об этомfoo
экземпляр тоже.
На панели инструментов Eureka теперь будут зарегистрированы два клиента.
Раскрутить другого клиента стак же название
Теперь попробуйте раскрутить другой экземплярeureka-client
только переопределяя параметр порта:
cd eureka-client
mvn spring-boot:run -Dserver.port=8082
/whoami
конечная точка дляhttp://localhost:8082
показывает, что мы ожидаем.
Через минуту или около того/instances
конечная точка теперь также показывает экземпляр, работающий на порту 8082, но по какой-то причине он не показывает экземпляр, работающий на порту 8080.
И если мы проверим/instances
конечная точка наhttp://localhost:8080
теперь мы также видим только экземпляр, работающий на 8082 (хотя ясно, что экземпляр на 8080 работает, потому что это то, что мы просим).
Панель инструментов Eureka показывает только 1 экземплярeureka-client
Бег.
Что тут происходит?
Давайте попробуем убить экземпляр, работающий на 8082, и посмотрим, что произойдет.
Когда мы запрашиваем/instances
на 8080 он все еще показывает только экземпляр на 8082.
Но через минуту это уходит, и мы снова видим экземпляр на 8080.
Вопрос в том, почему мы не видим оба случаяeureka-client
когда они оба бегут?