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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta