Как использовать маршрутизацию на основе регулярных выражений в Zuul? PatternServiceRouteMapper не работает?

Я пытаюсь добиться маршрутизации, например: http://zuul-host:8080/v1/foo/hello к моей службе foo-v1 ресурс hello

Я пробую пример регулярного выражения, описанный по адресу http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html

Моя проблема в том, что я вижу, что служба называется foo-v1 привязан к /v1/foo в PatternServiceRouteMapper но тогда я не могу назвать этот маршрут. Это также не видно в /mappings, Нужно ли где-то активировать этот маршрут?

Настроить

Фу Сервис

application.properties

server.port=9092
spring.application.name=foo-v1
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka.instance.healthcheck.enable=true

Zuul

Мой класс конфигурации Routings.java, Я добавил вывод лога sysout для отображения сервиса и получаю foo-v1 -> v1/foo в журнале. Поэтому это отображение должно быть активным.

@Configuration
public class Routings {

    @Bean
    public PatternServiceRouteMapper serviceRouteMapper() {
        return new PatternServiceRouteMapper(
            "(?<name>^.+)-(?<version>v.+$)",
            "${version}/${name}") {
            @Override
            public String apply(final String serviceId) {                
                String route =  super.apply(serviceId);
                System.out.println(serviceId + " -> " +route);
                return route;
            }
        };
    }
}

мой ZuulApplication.java

@SpringBootApplication
@EnableZuulProxy
@ComponentScan
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class, args);
    }

    @RefreshScope
    @ConfigurationProperties("zuul")
    public ZuulProperties zuulProperties() {
        return new ZuulProperties();
    }
}

1 ответ

Хорошо, нашел решение.

Удалить ignoredServices: '*' из конфига zuul.

Это происходит, если вы работаете с примерами. Они начинаются с явно настроенных маршрутов и игнорируют динамические маршруты. Это в документации, но не имеет смысла для меня на тот момент:-)

Чтобы пропустить автоматическое добавление службы, задайте zuul.ignored-services список шаблонов идентификаторов служб.

При использовании regexmapper мы начинаем использовать сервисы, которые добавляются автоматически, и эту функцию мы отключили ignoredServices: '*'

Другие вопросы по тегам