J'ai conçu un prototype de micro-service utilisant des technologies ci-dessous
Le service susmentionné se lève, ApI Gateway
et back end services
sont enregistrés dans le serveur Eureka
Configuration de routage de la voie API GATE
server.port=8080
eureka.client.serviceUrl.defaultZone = http://localhost:8083/eureka
spring.application.name=ApiGateway
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
spring.cloud.gateway.routes[0].id=service1
spring.cloud.gateway.routes[0].uri=lb://MICROSERVICE1
spring.cloud.gateway.routes[0].predicates[0]=Path=/service1/**
Configuration de la micro-service
server.port=8081
server.address=127.0.0.1
eureka.client.serviceUrl.defaultZone = http://localhost:8083/eureka
spring.application.name=MicroService1
error.whitelabel.enabled= false
contrôleur
@RestController
@RequestMapping("/service1")
public class HomeController {
@GetMapping("/message")
public String hello() {
return "response from micro service1";
}
}
Quand j'envoie une demande à la gate sa montrant ci-dessous une erreur
2020-12-16 22:26:09.770 ERROR 16700 --- [ctor-http-nio-3] a.w.r.e.AbstractErrorWebExceptionHandler : [d3334561-1] 500 Server Error for HTTP GET "/service1/message"
Java.net.UnknownHostException: failed to resolve 'LAPTOP-KU56B6A8' after 3 queries
at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.Java:1013) ~[netty-resolver-dns-4.1.55.Final.jar:4.1.55.Final]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
|_ checkpoint ⇢ HTTP GET "/service1/message" [ExceptionHandlingWebHandler]
Comment pouvons-nous résoudre le problème ci-dessus.
Ajouter dans votre application.properties
:
spring.cloud.discovery.enabled=true
Vous pouvez ajouter ce qui suit dans application.yml
déposer
spring:
cloud:
gateway:
routes:
- id: test-service
uri: lb://MICROSERVICE1
predicates:
- Path=/microservice1/**
filters:
- RewritePath=/microservice1/(?<segment>.*), /$\{segment}
avec cela, cela devrait fonctionner.
Comme laisser le dire si votre microservice1 est l'URL est localhost:8081/service1/message
Ensuite, vous pouvez définir le chemin de base de votre microservice1 dans API-passerelle en configurant le chemin comme je l'ai fait dans la configuration ci-dessus.
ajouter une propriété fluide dans Application.Property Fichier de tous les membres de Microservice et de l'API d'ERUKA, je suis confronté à la même question et à la résolution de la même activité
spring.cloud.discovery.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id= true
spring.cloud.gateway.discovery.locator.enabled= true
eureka.instance.hostname=localhost
après avoir ajouté toutes les propriétés ci-dessus, alors si vous êtes confronté à un problème, essayez le ci-dessous.
n'utilisez pas lb: // albums_service, mais utilisez lb: // albums-service .Parce que Uri Ne pas soutenir le soulignement.
Ajoutez uniquement la propriété suivante dans votre passerelle API :
Spring.Cloud.Discovery.Enabled = true
Assurez-vous que vous avez déjà ajouté DevTool Maven dépendance dans votre projet de passerelle API, mais sinon le redémarrez.