2016-07-25 4 views
0

Nach diesem Blog https://spring.io/blog/2015/07/14/microservices-with-spring, die auf Eureka Service Discovery basiert und wo die Service Discovery ordnungsgemäß funktioniert.Consul Service Discovery Problem mit Spring-Boot-Anwendungen

Aber wenn gewechselt hat Consul zu verwenden, anstatt Eureka der Service Discovery nicht funktioniert und immer diese Fehlermeldung:

java.lang.IllegalStateException: No instances available for ACCOUNTS-SERVICE 
at org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.execute(RibbonLoadBalancerClient.java:79) 
at org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:46) ... 

AKTUALISIERT: Nach dem vorherigen Fehler behoben hat, indem den korrekte Gesundheitscheck Endpunkt bereitstellt (siehe Antwort unten), wenn sie mit ordnungsgemäß versehen Host und Port des Konsuls Server in bootstrap.yml (Consul basierend PropertySource geladen während der 'Bootstrap' Phase), die Dienste zu Cloud Foundry bereitstellen:

--- 
spring: 
    profiles: cloud 
    cloud: 
    consul: 
     host: <consul host or ip> 
     port: 8500 

Consul ist das registrieren des Service , bu t mit kritischem Zustand (fehlgeschlagen)!

Würde mich über jede Hilfe oder Anleitung freuen.

Dank

+1

Haben Sie die Consul UI überprüft, wenn der Dienst erfolgreich registriert wurde? Nur um zu beseitigen, wenn Registrierung oder Entdeckung Ihr Problem ist. –

+0

Ja, der Service schlägt fehl (als kritisch gekennzeichnet). – kmarabet

+1

Haben Sie vielleicht Ihre Gesundheitschecks optimiert? –

Antwort

2

Die Frage wurde den Consul Gesundheitscheck Standardpfades verwendet, die den/Gesundheit Endpunkt gesetzt. Nachdem der Federantrieb in allen Client-Anwendungen (Web-Server und Micro-Service) aktiviert wurde, wurde dieses Problem behoben.

Oder Sie können die Standard-Consul Gesundheitscheck Endpunkt in der bootstrap.yml Datei ändern:

cloud: 
    consul: 
     discovery: 
     healthCheckPath: /test 

NB. Um Federspeicher- in Maven zu ermöglichen die folgende Abhängigkeit wurde die pom.xml-Datei hinzugefügt:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency> 

Weitere Informationen finden Sie unter: http://cloud.spring.io/spring-cloud-consul/spring-cloud-consul.html

Bei der Bereitstellung (Schieben) zu CF (CloudFoundry) die URI der implementierte Anwendung sollte für Service-Discovery-Prozess (CF bietet Anwendung URIs in vcap.application.uris Umgebungsvariable), so dass die folgende Konfiguration sollte hinzugefügt werden, um die Datei zu bootsrap.yml Consul bereitgestellt werden:

--- 
spring: 
    profiles: cloud 
    cloud: 
    consul: 
     host: <consul host or ip> 
     port: 8500 
     discovery: 
     instanceId: ${spring.application.name}:${vcap.application.application_name}:${vcap.application.instance_id} 
     hostname: ${vcap.application.uris[0]} 
     port: 80 

NB. instanceId is used by Consul to register the application (microservice) instance.

Verwandte Themen