使用eureka服务时的Zuul Routing

Zuul Routing when using eureka services

我有一个相当简单的 Spring Cloud Netflix 设置。我们使用 Zuul 作为反向代理,使用 Eureka 进行服务发现和注册。我们有我们正在慢慢扼杀的遗留服务。我们有许多简单的服务,它们的端点配置如下:

{host}:{port}/{service-name}/**

所以现在当每个服务都注册到 eureka 并随后将路由添加到 Zuul 时,zuul 端点如下所示:

{zuul-host}:{zuul-port}/{service-name}/{service-name}/**

我想阻止 Zuul 从 eureka 服务的路由 URI 中剥离前缀,以便我的 zuul 端点如下所示:

{zuul-host}:{zuul-port}/{service-name}/**

并转发至:

{zuul-host}:{zuul-port}/{service-name}/** 

我希望这样做的方式使我不必为每项服务添加配置。

我原以为 zuul.strip-prefix 会成功,但事实并非如此。

当前 Zuul application.yml:

zuul:
  routes:
    oldservice:
      path: /oldservice/**
      url: http://oldservice-host:9080/api/v1/oldservice
  strip-prefix: false
eureka:
  client:
    serviceUrl:
      defaultZone: http://eureka-host:8761/eureka/

有人对我如何以这种方式配置 zuul 有建议吗?

既然你正在用 eureka 注册你的服务,为什么不像下面那样使用 service-id 进行路由。 service-id 是您的服务在 Eureka 中注册的 ID。

zuul:
  routes:
     path: /oldservice/**
     service-id: oldservice
     strip-prefix: false
eureka:
  client:
    serviceUrl:
      defaultZone: http://eureka-host:8761/eureka/

对于您当前的情况,我将 strip-prefix 移动到路由中,我的系统中有它,您可以试试。

zuul:
  routes:
    oldservice:
      path: /oldservice/**
      url: http://oldservice-host:9080/api/v1/oldservice
      strip-prefix: false
eureka:
  client:
    serviceUrl:
      defaultZone: http://eureka-host:8761/eureka/