通过serviceId进行的Zuul路由不起作用

时间:2018-06-27 14:48:34

标签: spring routing spring-cloud netflix-zuul service-discovery

我在不同的帖子上遇到了类似的问题,但是它们对我毫无用处(无答案或无帮助的答案)。我将在这里描述所有细节,并希望获得帮助。

我使用java8,spring boot 2.0.3,spring cloud元素基于 Finchley.RELEASE 版本。

在我的测试微服务应用程序中,我具有下一个服务: config-server discovery-service (Eureka), edge-service ( zuul),卡服务。所有服务均在启动时从 configuration-server 加载其自己的配置。服务启动没有问题。

卡服务-在启动时获取随机端口。这是通过serviceId将zuul rout配置为日历服务的原因。

zuul:
  debug:
    request: true
  routes:
    card-service:
        path: /card-service/**
        serviceId: card-service
        stripPrefix: true

使用发现服务客户端,我检测到下一个注册的服务["edge-server", "card-service"]。因此,zuul路由使用相同的serviceId(card-service)。服务名称正确,因为它在 card-service 应用bootstrap.yml中是相同的:

spring:
  application:
    name: card-service

我通过以下方式直接访问card-service

  

http://localhost:59496/card-service/api/cards

     

http://localhost:59496/api/cards

(我为其配置了相同的结果)。 -工作正常。

我的Zuul(<边缘>服务器在8765端口上启动),所以我希望通过

进行导航
  

http://localhost:8765/card-service/api/cards

给出相同的结果。但是结果是空的。检查边缘服务器日志:

No handler mapping found for [/card-service/api/cards]
Last-Modified value for [/card-service/api/cards] is: -1

通过执行器映射检查边缘服务器http://localhost:8765/actuator/mappings-我在这里展示了最感兴趣的部分):

{
  "contexts": {
    "edge-server-1": {
      "mappings": {
        "dispatcherServlets": {
          "dispatcherServlet": [
            ...,
            {
              "handler": "org.springframework.cloud.netflix.zuul.web.ZuulController@24a37416",
              "predicate": "/card-service/**",
              "details": null
            },

问题

是否知道如何为 zuul 修复路由映射?

1 个答案:

答案 0 :(得分:3)

那是我的失败。我以为我已按照本教程进行了配置,但是似乎在春季启动配置中使用了@EnableZuulServer而不是@EnableZuulProxy的自动完成功能。 @EnableZuulProxy需要为Zuul加载配置的routes,然后一切正常运行。