Je suis très nouveau sur les microservices et essaie d'exécuter le code à partir du lien: https://dzone.com/articles/advanced-microservices-security-with-spring-and-oa . Lorsque je lance simplement le code, l'erreur suivante apparaît.
Quelle est la solution ?
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.Java:111) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.Java:134) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.Java:137) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.Java:77) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.Java:134) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.Java:1030) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.Java:944) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.Java:1468) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.Java:1435) [eureka-client-1.4.12.jar:1.4.12]
at Java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [na:1.8.0_144]
at Java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0_144]
at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_144]
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_144]
at Java.lang.Thread.run(Unknown Source) [na:1.8.0_144]
2017-09-09 18:53:11.909 ERROR 16268 --- [tbeatExecutor-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error
Je n'ai rien installé de particulier sur le système. S'il vous plaît laissez-moi savoir ce que je dois installer?
Je trouve que je dois ajouter ces deux applications à la application.properties, cela peut fonctionner. Seulement une ne suffit pas.
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
Ce message particulier est juste un avertissement. Votre application tente de s’inscrire auprès d’Eureka, mais Eureka ne répond pas. Vous pouvez soit démarrer une instance d'Eureka, soit désactiver l'enregistrement automatique en ajoutant ce qui suit à votre application.yml.
eureka:
client:
register-with-eureka: false
Vous devez créer Eureka Registry Server qui est un autre microservice. C'est la classe principale d'une application SpringBoot, elle devrait avoir l'annotation @EnableEurekaServer.
Ensuite, dans votre client Eureka, vous devrez mentionner l’URL du serveur de registre dans appliation.yml comme ci-dessous:
spring:
application:
name: stock-service
server:
port: 8083
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8084/eureka/
instance:
hostname: localhost
où defaultzone doit contenir la valeur de votre registre Eureka.
Une fois toutes ces configurations effectuées, vous devez obtenir le microservice du registre Eureka, puis le client Eureka. Une fois votre registre créé, vous ne rencontrerez pas cette exception.
Cela se produit car il essaie de se connecter à n’importe quel serveur connu. Par conséquent, pour mettre fin à cette erreur, un serveur connu est le serveur eureka situé sur le port 8761, qui est son port par défaut. Vous devrez donc mettre à jour le fichier application.properties avec
server.port=8761
Pour éviter que eureka ne s'enregistre elle-même, vous ajoutez ceci au fichier application.properties.
eureka.client.register-with-eureka=false
Assurez-vous qu'EurekaServer est activé. Par exemple, en utilisant Spring Boot, écrivez ce qui suit sur la classe principale.
@EnableEurekaServer
S'il vous plaît, pardonnez-moi de fournir une solution à l'aide d'un fichier .properties, mais c'est ce que je travaille avec, mais les configurations .yml ne devraient pas être trop différentes.
Assurez-vous que votre client ruban est correct
package com.in28minutes.microservices.currencyconversionservice;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(name="curreenter code herency-exchange-service")
@RibbonClient(name="currency-exchange-service")
public interface CurrencyExchangeServiceProxy {
@GetMapping("/currency-exchange/from/{from}/to/{to}")
public CurrencyConversionBean retrieveExchangeValue
(@PathVariable("from") String from, @PathVariable("to") String to); //mention correct pathvariables
}