Автоматическая маршрутизация Spring Cloud Gateway с помощью eureka

Я работаю со Spring над созданием микросервисов. Я использую Eureka для обнаружения сервисов и облачный шлюз Spring для маршрутизации. Я хотел бы использовать автоматический маршрут для количества услуг, которые у меня есть.

Например, если одна служба «eureka-client» регистрируется в Eureka и для маршрутизации с помощью Spring Cloud Gateway, я должен самостоятельно создать маршрут для каждой службы, например следующей.

  routes:
  - id: eureka-client
    uri: lb://eureka-client
    predicates:
    - Path=/eureka-client/**

С некоторыми услугами это приемлемо, но в конце концов я могу получить сотни услуг. И каждый должен написать свой собственный маршрут в Spring Cloud Gateway. Я использовал spring.cloud.gateway.discovery.locator.enabled = true и не решил проблему. В основном я пытаюсь удалить конфигурацию маршрутов в файле yaml.

Есть ли способ обеспечить автоматическую маршрутизацию от Spring Cloud Gateway к каждой службе от Eureka?

Ссылка: https://cloud.spring.io/spring-cloud-gateway/reference/html/#discoveryclient-route-definition-locator.

Я получаю 404, так как он не смог получить правильную маршрутизацию. Любая помощь будет принята с благодарностью. Спасибо.


person bhoo    schedule 05.11.2019    source источник


Ответы (3)


Просто используя

spring.cloud.gateway.discovery.locator.enabled=true spring.cloud.gateway.discovery.locatorlower-case-service-id: true

без явного указания маршрутов должны работать.

person Tafadzwa Chimberengwa    schedule 13.08.2020

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

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

А затем запретить шлюзу регистрироваться в eureka

eureka.client.register-with-eureka = false

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

person Numan Karaaslan    schedule 28.11.2020
comment
Это ничего не меняет, если шлюз сам является клиентом эврики. Я проверил оба случая и не дал ожидаемого результата - person BOUH OUALID; 13.01.2021

Попробуйте получить доступ с URL-адресом в верхнем регистре, например:

<localhost>:<port>/EUREKA-CLIENT/<path>

В качестве альтернативы вы можете установить это:

spring.cloud.gateway.discovery.locator.lower-case-service-id=true
person Ali Kurnaz    schedule 12.11.2019