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
Vous devez vous connecter pour publier un commentaire.
Locales pour les déploiements, essayez de configurer {namespace}.instanceId propriété dans eureka-client.propriétés (ou eureka.exemple.metadataMap.instanceId pour le bon fichier yaml en cas de Printemps basée sur le Cloud de l'installation). Il est profondément enracinée dans la façon d'Eureka, le serveur calcule l'application répertorie et compare InstanceInfo pour la PeerAwareInstanceRegistryImpl - en l'absence des données plus concrètes (par exemple: exemple de métadonnées est disponible), ils essaient d'obtenir l'id de l'hôte..
Je ne le recommande pas pour les SSFE déploiement si, à cause de déconner avec le instanceId vous apportera de la difficulté à trouver la machine qui héberge un service en particulier, d'autre part, je doute que vous aurez accueille deux services identiques sur une même machine, à droite?
eureka.instance.metadataMap.instanceId
) j'ai commencé le deuxième exemple avecmvn spring-boot:run -Dserver.port8082 -Deureka.instance.metadataMap.instanceId=instance2
et il s'affiche dans le tableau de bord et la réponse de laDiscoveryClient
maintenant.Oui, vous avez raison, il devrait être "metadataMap'
J'ai trouvé
{namespace}.instanceId
être au travail et de ne paseureka.instance.metadataMap.instanceId
avec eureka, maître de la branche d'aujourd'hui.Peut-être qu'il a obtenu obsolète et finalement retiré - à mon humble avis, les espaces de noms sont plus robustes. Je vais vérifier dans le sous-jacent impl. Merci pour la mise à jour.
OriginalL'auteur bad_habit
Afin d'obtenir toutes les instances afficher dans le portail d'administration par la mise en unique euraka.exemple.nom d'hôte de votre Eureka fichier de configuration.
Le nom d'hôte est utilisé comme clé pour le stockage de la InstanceInfo dans com.netflix.de la découverte.partagé.Demande (puisque pas de type UniqueIdentifier est réglé). Donc, vous avez à usage unique les noms d'hôtes. Lorsque vous testez un ruban dans ce scénario, vous verriez que la charge ne sera pas équilibré.
Suivant l'application.yml est exemple:
C'est un bug avant dans Eureka, vous pouvez cocher plus d'informations dans https://github.com/codecentric/spring-boot-admin/issues/134
OriginalL'auteur Chuan CC