2017-01-20 2 views
1

J'essaie d'obtenir un microservice simple pour enregistrer sur le serveur Eureka et ensuite avoir un proxy Zuul pour le microservice. J'ai eu le microservice pour m'inscrire au serveur Eureka. Cependant, chaque fois que j'apporte le service Zuul, je vois qu'il ne s'enregistre pas sur le serveur Eureka. Chaque fois que je tente de route vers la Microservice-je obtenir l'exception ci-dessous:Spring Cloud: lancement de Zuul "L'équilibreur de charge n'a pas de serveur disponible pour le client"

équilibreur de charge ne pas serveur disponible pour le client: Microservice

Je ne suis pas en mesure de savoir où est le problème. Toute aide serait grandement appréciée

Voici mes classes Spring Boot pour chacun de ces composants.

Composants Microservice

__gVirt_NP_NN_NNPS<__ MicroserviceApplication.java

@SpringBootApplication(scanBasePackages = { "some.package.controller", "some.package.service" }) 
@EnableEurekaClient 
@EnableJpaRepositories("some.package.repository") 
@EntityScan("some.package.entity") 
public class MicroserviceApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(MicroserviceApplication.class, args); 
    } 

} 

bootstrap.yml

server: 
    port: 8090 

info: 
    component: Core Services 

spring: 
    application: 
    name: microservice 

application.yml

eureka: 
    instance: 
    leaseRenewalIntervalInSeconds: 1 
    leaseExpirationDurationInSeconds: 2 
    client: 
    serviceUrl: 
     defaultZone: http://localhost:8761/eureka/ 
    healthcheck: 
     enabled: true 
    lease: 
     duration: 5 

#some other logging and jpa properties below 

Composants Eureka serveur

__gVirt_NP_NN_NNPS<__ EurekaServerApplication.java

@SpringBootApplication 
@EnableEurekaServer 
public class EurekaServerApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(EurekaServerApplication.class, args); 
    } 

} 

bootstrap.yml

spring: 
    application: 
    name: discovery-server 

application.yml

server: 
    port: 8761 

info: 
    component: Discovery Server 

eureka: 
    client: 
    registerWithEureka: false 
    fetchRegistry: false 
    serviceUrl: 
     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ 
    instance: 
    hostname: localhost 
    server: 
    waitTimeInMsWhenSyncEmpty: 0 

API Components passerelle

ZuulGatewayApplication.java

@SpringBootApplication 
@EnableZuulProxy 
public class ZuulGatewayApplication { 
    public static void main(String[] args) { 
     SpringApplication.run(ZuulGatewayApplication.class, args); 
    } 

    @Bean 
    public ZuulGatewayPreFilter gatewayPreFilter() { 
     return new ZuulGatewayPreFilter(); 
    } 
} 

bootstrap.yml

spring: 
    application: 
    name: api-gateway 

application.yml

server: 
    port: 8888 

info: 
    component: API Gateway 

eureka: 
    instance: 
    leaseRenewalIntervalInSeconds: 1 
    leaseExpirationDurationInSeconds: 2 
    client: 
    serviceUrl: 
     defaultZone: http://localhost:8761/eureka/ 

zuul: 
    routes: 
    microservice: 
     path: /microservice/** 
     serviceId: microservice 
+0

Que dit eureka (le tableau de bord et '/ eureka/apps') Microservice est-il enregistré?Avoir des temps de renouvellement et d'expiration aussi courts peut causer des problèmes de désabonnement. Avez-vous essayé de les allonger? – spencergibb

+0

Quelle version utilisez-vous? – spencergibb

+0

Le microservice est enregistré correctement, l'ajout de l'annotation '@ EnableEurekaClient' à la classe d'application Zuul m'a permis de résoudre le problème, Zuul est maintenant affiché sur le tableau de bord eureka en tant que service enregistré et est également très proche du microservice. Je n'ai pas spécifié de version spécifique mais basée sur Spring Cloud version Camden.SR4. Que recommanderiez-vous pour les intervalles de renouvellement et d'expiration? – Sayantan

Répondre

4

Ajout @EnableEurekaClient résoudre ce problème. L'application Zuul est maintenant détectable dans le serveur Eureka et permet de router les requêtes.