4

我尝试实现的是路由,例如: http://zuul-host:8080/v1/foo/hello到我的服务foo-v1、资源hello

我正在尝试http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html中描述的regexmapper示例

我的问题是我看到一个名为的服务foo-v1被映射到/v1/fooPatternServiceRouteMapper但是我无法调用该路由。也看不到/mappings。我必须在某处激活该路线吗?

设置

福服务

application.properties

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

祖尔

我的配置类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();
    }
}
4

1 回答 1

3

好的,找到了解决方案。

ignoredServices: '*'从 zuul 配置中删除。

如果您通过示例工作,就会发生这种情况。它们从显式配置的路由开始,忽略动态路由。它在文档中,但当时对我来说毫无意义:-)

要跳过自动添加服务,请将 zuul.ignored-services 设置为服务 id 模式列表。

使用 regexmapper 时,我们开始使用自动添加的服务,这是我们禁用的功能ignoredServices: '*'

于 2016-04-12T09:06:34.183 回答