Маршрутизация шлюза Spring Cloud API не работает

Я разработал прототип микросервиса, используя следующие технологии

  1. Сервер Eureka (сервер обнаружения)
  2. Spring boot (внутренняя служба)
  3. Spring Cloud API GateWay

Вышеупомянутые службы встают, ApI Gateway и back end services зарегистрированы на Eureka Сервере

введите описание изображения здесь

Конфигурация маршрутизации API Gate Way

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/**

Конфигурация микросервиса

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

Контроллер

@RestController
@RequestMapping("/service1")
public class HomeController {
    @GetMapping("/message")
    public String hello() {
        return "response from micro service1";
    }

}

Когда я отправляю запрос к воротам, он показывает ошибку ниже

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]

Как мы можем решить вышеуказанную проблему.


person arj    schedule 17.12.2020    source источник
comment
Добавьте: eureka.instance.prefer-ip-address = true в файл application.properties для всех ваших микросервисов и api-gateway.   -  person Vipul Gupta    schedule 27.01.2021


Ответы (8)


Я изменил конфигурацию маршрутизации API Gate Way, как показано ниже

spring.cloud.gateway.routes[0].id=service1
spring.cloud.gateway.routes[0].uri=http://localhost:8081/service1/
spring.cloud.gateway.routes[0].predicates[0]=Path=/service1/**

Сейчас работает нормально

person arj    schedule 17.12.2020
comment
Вы просто убрали балансировку нагрузки - person Muhammed Ozdogan; 03.05.2021
comment
вы полностью убили цель микросервисов, убрав балансировку нагрузки. - person Muhammad Adnan; 16.07.2021

Добавьте eureka.instance.hostname=localhost в оба экземпляра микросервисов, это сработает и не выдаст ошибку

person Shubham Chinchure    schedule 18.01.2021

привет jebji, если у вас все еще есть эта проблема, добавьте spring.cloud.discovery.enabled = true в application.properties

person ilham kh    schedule 25.12.2020
comment
добавлено, но все еще не работает :( - person Ryhan Ahmed; 05.01.2021
comment
У меня такая же проблема - person BOUH OUALID; 12.01.2021

Добавьте в свой шлюз API только следующее свойство:

spring.cloud.discovery.enabled = true

Убедитесь, что вы уже добавили зависимость DevTool от maven в свой проект шлюза API, но если нет, перезапустите его.

person gourav kumar    schedule 26.01.2021

добавить текущее свойство в файл application.property для всех клиентских микросервисов eruka и шлюза api, я сталкиваюсь с той же проблемой и решаю делать то же действие

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
person shrawan tiwari    schedule 27.02.2021

Добавьте spring.cloud.discovery.enabled = true в свой application.properties

person user15618336    schedule 13.04.2021

Добавьте ниже как к шлюзу, так и к отдельному микросервису, чтобы исправить проблему

eureka.instance.hostname=localhost
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:8010/eureka/
person Cyril Sojan    schedule 06.05.2021

после добавления всех вышеуказанных свойств, а также, если вы столкнулись с проблемой, попробуйте следующее:

не используйте lb: // album_service, а используйте lb: // album-service. Потому что URI не поддерживает подчеркивание.

person Ravindra    schedule 26.05.2021
comment
лол, все та же проблема - person Muhammad Adnan; 16.07.2021