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
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
Quelle version utilisez-vous? – spencergibb
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