Registre varias instancias de un cliente Spring Boot Eureka desde un único host
ACTUALIZAR
El README eneste repositorio se ha actualizado para demostrar la solución en la respuesta aceptada.
Estoy trabajando con un ejemplo simple de registro y descubrimiento del servicio Spring Boot Eureka basado enesta guia.
Si inicio una instancia de cliente, se registra correctamente y puede verse a través deDiscoveryClient
. Si inicio una segunda instancia con un nombre diferente, también funciona.
Pero si inicio dos instancias con el mismo nombre, el tablero solo muestra 1 instancia ejecutándose, y elDiscoveryClient
solo muestra la segunda instancia.
Cuando elimino la segunda instancia, la primera se vuelve a ver a través del tablero y el cliente de descubrimiento.
Aquí hay más detalles sobre los pasos que estoy tomando y lo que estoy viendo:
Servidor Eureka
Iniciar el servidor
cd eureka-server
mvn spring-boot:run
Visite el panel de Eureka enhttp: // localhost: 8761
Tenga en cuenta que todavía no hay 'instancias' registradas
Cliente Eureka
Poner en marcha un cliente
cd eureka-client
mvn spring-boot:run
Visite al cliente directamente enhttp: // localhost: 8080 /
los/whoami
el punto final mostrará el autoconocimiento del cliente sobre el nombre y el puerto de su aplicación
{
"springApplicationName":"eureka-client",
"serverPort":"8080"
}
los/instances
el punto final tardará hasta un minuto en actualizarse, pero eventualmente debería mostrar todas las instancias deeureka-client
que se han registrado con Eureka Discovery Client.
[
{
"host":"hostname",
"port":8080,
"serviceId":"EUREKA-CLIENT",
"uri":"http://hostname:8080",
"secure":false
}
]
También puede visitar el tablero de Eureka nuevamente y verlo allí.
Gira a otro cliente con un nombre diferente
Puede ver que se registrará otro cliente haciendo lo siguiente:
cd eureka-client
mvn spring-boot:run -Dspring.application.name=foo -Dserver.port=8081
los/whoami
el punto final mostrará el nombrefoo
y el puerto8081
.
En un minuto más o menos, el/instances
el punto final mostrará la información sobre estofoo
instancia también.
En el panel de Eureka, ahora se registrarán dos clientes.
Gira a otro cliente con elmismo nombre
Ahora intente girar otra instancia deeureka-client
solo anulando el parámetro del puerto:
cd eureka-client
mvn spring-boot:run -Dserver.port=8082
los/whoami
punto final parahttp://localhost:8082
muestra lo que esperamos
En un minuto más o menos, el/instances
El punto final ahora muestra la instancia que se ejecuta en el puerto 8082 también, pero por alguna razón, no muestra la instancia que se ejecuta en el puerto 8080.
Y si revisamos el/instances
punto final enhttp://localhost:8080
ahora también solo vemos la instancia ejecutándose en 8082 (aunque claramente, la que está en 8080 se está ejecutando ya que eso es lo que estamos pidiendo.
El panel de Eureka solo muestra 1 instancia deeureka-client
corriendo.
¿Que está pasando aqui?
Intentemos matar la instancia que se ejecuta en 8082 y veamos qué sucede.
Cuando consultamos/instances
en 8080, todavía solo muestra la instancia en 8082.
Pero un minuto después, eso desaparece y acabamos de ver la instancia en 8080 nuevamente.
La pregunta es, ¿por qué no vemos ambas instancias deeureka-client
cuando ambos corren?