Enregistrer plusieurs Instances d'un Ressort de Démarrage Eureka Client à partir d'un seul ordinateur hôte

Mise à JOUR

Le fichier README dans ce repo a été mis à jour afin de démontrer la solution dans l'acceptation de réponse.


Je travaille avec un exemple simple d'un Ressort de Démarrage Eureka service d'enregistrement et de découverte basé sur ce guide.

Si je démarre une instance de client, il enregistre correctement, et il peut se voir lui-même à travers le DiscoveryClient. Si je commence un deuxième exemple avec un nom différent, il fonctionne aussi bien.

Mais si je lance deux instances du même nom, le tableau de bord montre seulement 1 instance en cours d'exécution, et la DiscoveryClient ne montre que la deuxième instance.

Quand je tue le 2ème exemple, le 1er est de nouveau visible dans le tableau de bord et la découverte du client.

Voici un peu plus de détails sur les étapes que je suis et ce que je vois:

Eureka Serveur

Démarrer le serveur

cd eureka-server
mvn spring-boot:run

Visite de l'Eureka de tableau de bord, http://localhost:8761

Noter qu'il n'y a pas des Instances encore inscrit

Eureka Client

Début d'un client

cd eureka-client
mvn spring-boot:run

Visitez le client directement au http://localhost:8080/

La /whoami point de terminaison va montrer au client la connaissance de soi, de son nom de l'application et le port

{
  "springApplicationName":"eureka-client",
  "serverPort":"8080"
}

La /instances point de terminaison va prendre jusqu'à une minute pour mettre à jour, mais devrait éventuellement montrer tous les cas de eureka-client qui ont été enregistrés auprès de l'Eureka Découverte Client.

[   
    {
      "host":"hostname",
      "port":8080,
      "serviceId":"EUREKA-CLIENT",
      "uri":"http://hostname:8080",
      "secure":false   
    } 
]

Vous pouvez également visiter le Eureka dashoboard à nouveau et voir ce qui y figure.

Tourner un autre client avec un nom différent

Vous pouvez voir qu'un autre client sera enregistrée en procédant comme suit:

cd eureka-client
mvn spring-boot:run -Dspring.application.name=foo -Dserver.port=8081

La /whoami point de terminaison indique le nom foo et le port 8081.

Dans une minute ou deux, le /instances point de terminaison d'afficher les informations à propos de ce foo instance de trop.

Sur l'Eureka tableau de bord, deux clients vont maintenant être enregistré.

Tourner un autre client avec le même nom

Maintenant, essayez de tourner un autre exemple de eureka-client par seulement sur l'équitation, le paramètre de port:

cd eureka-client
mvn spring-boot:run -Dserver.port=8082

La /whoami point de terminaison pour http://localhost:8082 montre ce à quoi nous nous attendons.

Dans une minute ou deux, le /instances point de terminaison montre maintenant l'instance en cours d'exécution sur le port 8082 aussi, mais pour une raison quelconque, il ne montre pas l'exemple en cours d'exécution sur le port 8080.

Et si nous vérifions les /instances point de terminaison sur http://localhost:8080 nous avons aussi maintenant seulement de voir l'instance en cours d'exécution sur 8082 (même si clairement, l'un sur le port 8080 est en cours d'exécution puisque c'est ce que nous demandons.

Eureka tableau de bord montre seulement 1 instance de eureka-client en cours d'exécution.

Ce qui se passe ici?

Nous allons essayer de tuer l'instance en cours d'exécution sur 8082 et voir ce qui se passe.

Lorsque nous requête /instances sur 8080, il encore que montre l'exemple sur 8082.

Mais une minute plus tard, qui s'en va et nous venons de voir l'instance sur 8080 nouveau.

La question est, pourquoi ne voit-on pas les deux instances de eureka-client quand ils sont à la fois en cours d'exécution?

OriginalL'auteur mcwumbly | 2016-03-27