Шлюз Spring Cloud не вызывает службу происхождения

Я впервые использую шлюз Spring Cloud. моя конечная точка службы http://localhost:8080/student/getlist

Проблема в том, что когда я пытаюсь вызвать свою службу с помощью облачного шлюза, он дает мне 404. Эврика правильно показывает URL-адрес службы.

мои свойства шлюза ниже

spring.application.name=gateway
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
server.port=8085
management.endpoints.web.exposure.include=*

spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.routes.id=student-service
spring.cloud.gateway.routes.uri=lb://student-service
spring.cloud.gateway.routes.predicates.Path=/student/**

ниже приведены маршруты исполнительных механизмов в шлюзе

[{"route_id":"CompositeDiscoveryClient_GATEWAY","route_definition":{"id":"CompositeDiscoveryClient_GATEWAY","predicates":[{"name":"Path","args":{"pattern":"/GATEWAY/**"}}],"filters":[{"name":"RewritePath","args":{"regexp":"/GATEWAY/(?<remaining>.*)","replacement":"/${remaining}"}}],"uri":"lb://GATEWAY","order":0},"order":0},{"route_id":"CompositeDiscoveryClient_STUDENT-SERVICE","route_definition":{"id":"CompositeDiscoveryClient_STUDENT-SERVICE","predicates":[{"name":"Path","args":{"pattern":"/STUDENT-SERVICE/**"}}],"filters":[{"name":"RewritePath","args":{"regexp":"/STUDENT-SERVICE/(?<remaining>.*)","replacement":"/${remaining}"}}],"uri":"lb://STUDENT-SERVICE","order":0},"order":0}]

Я пытаюсь вызвать конечную точку службы через шлюз через

http://localhost:8085/student/getlist

выше URL, но это не работает. Что я делаю неправильно. нет никакого контекстного пути к каким-либо микросервисам. образец кода находится под

https://github.com/ojith97/sample.git

person user2567005    schedule 25.09.2018    source источник
comment
predicates это название службы?   -  person Thanh Nguyen Van    schedule 25.09.2018
comment
нет, это какое-то значение пути. Должно ли это быть название услуги в эврике?   -  person user2567005    schedule 25.09.2018
comment
да, это должно быть имя службы в eueka   -  person Thanh Nguyen Van    schedule 25.09.2018
comment
попробуйте и тот, не работает   -  person user2567005    schedule 25.09.2018
comment
spring.application.name = gateway eureka.client.serviceUrl.defaultZone = localhost: 8761 / eureka server.port = 8085 management.endpoints.web.exposure.include = * # spring.cloud.gateway.discovery.locator.lowerCaseServiceId = true spring.cloud.gateway.discovery.locator.enabled = true spring.cloud.gateway.routes.id = student -service spring.cloud.gateway.routes.uri = lb: // студент-сервис spring.cloud.gateway.routes.predicates.Path = / student-service / **   -  person user2567005    schedule 25.09.2018
comment
что такое название сервиса?   -  person Thanh Nguyen Van    schedule 25.09.2018
comment
spring.cloud.gateway.routes.predicates.Path=/student-service/** должно быть spring.cloud.gateway.routes.student-service.Path=/student/**, где student-service - имя службы в эврике, а / student / ** - путь.   -  person Thanh Nguyen Van    schedule 25.09.2018
comment
spring.application.name = gateway eureka.client.serviceUrl.defaultZone = localhost: 8761 / eureka server.port = 8085 management.endpoints.web.exposure.include = * # spring.cloud.gateway.discovery.locator.lowerCaseServiceId = true spring.cloud.gateway.discovery.locator.enabled = true spring.cloud.gateway.routes.id = студент -service spring.cloud.gateway.routes.uri = lb: // student-service # spring.cloud.gateway.routes.predicates.Path = / student-service / ** spring.cloud.gateway.routes.student-service .Path = / student / **.   -  person user2567005    schedule 25.09.2018
comment
все еще не сработало? какая-нибудь ошибка?   -  person Thanh Nguyen Van    schedule 25.09.2018
comment
выше новый, но он не работает   -  person user2567005    schedule 25.09.2018
comment
нет ошибки только http 404   -  person user2567005    schedule 25.09.2018
comment
404 означает, что API не завершается, вы уже создали student-service службу?   -  person Thanh Nguyen Van    schedule 25.09.2018
comment
да, это дает мне ответ на   -  person user2567005    schedule 25.09.2018
comment
localhost: 8080 / student / getlist   -  person user2567005    schedule 25.09.2018
comment
я чувствую, что шлюз не направляет к службе   -  person user2567005    schedule 25.09.2018
comment
у тебя telnet telnet localhost 8085 подключен или нет?   -  person Thanh Nguyen Van    schedule 25.09.2018
comment
шлюз запущен и работает на порту 8085, а служба работает на 8080, а eureka работает на 8761   -  person user2567005    schedule 25.09.2018
comment
нет, я имею ввиду сервис запущен или нет? порт 8080   -  person Thanh Nguyen Van    schedule 25.09.2018
comment
это работает и работает   -  person user2567005    schedule 25.09.2018
comment
вы можете показать файл конфигурации службы? и Application название сервиса в эврике?   -  person Thanh Nguyen Van    schedule 25.09.2018


Ответы (2)


Попробуйте изменить свои свойства на

spring.cloud.gateway.routes[0].id=student-service
spring.cloud.gateway.routes[0].uri=lb://student-service
spring.cloud.gateway.routes[0].predicates[0]=Path=/student/**
person Hank    schedule 20.09.2019

Вы должны уведомить шлюз о сервере eureka с помощью этого

eureka.client.service-url.defaultZone = http: // user: pass @ localhost: 8761 / eureka

А затем сделайте так, чтобы шлюз не регистрировался в эврике.

eureka.client.register-with-eureka = false

Второй вариант важен, поскольку он вызывает ошибку 404 при балансировке нагрузки с использованием структуры lb: servicename.

person Numan Karaaslan    schedule 28.11.2020