Как реализовать обнаружение пользовательских служб с помощью Spring cloud gateway

#spring #spring-boot #spring-cloud-gateway #service-discovery

Вопрос:

Я новичок в spring cloud gateway и хотел бы использовать его в проекте в качестве службы шлюза.

Моя проблема в том, что у меня нет uri, о котором можно упомянуть в приведенном ниже yaml. uri должен быть разрешен во время выполнения, где текст «учетная запись пользователя-служба» должен быть преобразован в https://user-account.san.com. Это происходит путем вызова встроенного кода библиотеки, например:

 @Bean
private ServiceLocator serviceLocator;

public locateService(String service) {
   //library call to resolve the text into the uri.
   //example: 'user-account-service' gets transformed into uri https://user-account.san.com
   serviceLocator.locate(service);
}
 

Проект уже содержит пользовательскую службу обнаружения, подобную Eureka, в которой текст с надписью «служба учетных записей пользователей» преобразуется в URL-адрес.

Я вижу, что spring cloud gateway поддерживает обнаружение Eureka с помощью конфигурации, но можно ли написать пользовательский фильтр или настроить пользовательскую службу обнаружения, где, скажем, я могу использовать значение «идентификатор «»служба учетной записи пользователя», как показано ниже, чтобы вызвать пользовательскую службу обнаружения для разрешения uri?

Обратите внимание, что у меня есть несколько таких служб, поэтому текст «учетная запись пользователя-служба» должен храниться в конфигурации вместо жесткого кода.

 spring:
  cloud:
    gateway:
      routes:
        - id: user-account-service
          uri: no://op
          predicates:
          - Path=/user-account/user/**