web-dev-qa-db-fra.com

Routage de la passerelle API de Spring Cloud API ne fonctionne pas

J'ai conçu un prototype de micro-service utilisant des technologies ci-dessous

  1. Server Eureka (serveur de découverte)
  2. Botte à ressort (Service Back-End)
  3. Gateway de l'API de nuage de printemps

Le service susmentionné se lève, ApI Gateway et back end services sont enregistrés dans le serveur Eureka

enter image description here

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.

3
arj

Ajouter dans votre application.properties:

spring.cloud.discovery.enabled=true
0
user15618336

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.

0
Raj Hirani

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
0
shrawan tiwari

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.

0
Ravindra

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.

0
gourav kumar