Как использовать маршрутизацию на основе регулярных выражений в 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: '*'