Spring Cloud Gateway 默认路由不起作用

Posted

技术标签:

【中文标题】Spring Cloud Gateway 默认路由不起作用【英文标题】:Spring cloud gateway default routing doesn't work 【发布时间】:2020-04-01 03:49:13 【问题描述】:

我想通过在 eureka 中注册的服务 ID(应用程序名称)在我的 spring 云网关(无 zuul)中启用默认路由,但我总是收到 404 错误。

在我的聊天服务的 bootstrap.yml 我已经定义了应用名称

spring:
  application:
    name: chat-service

在应用程序属性中:

eureka:
  instance:
    preferIpAddress: true
  client:
    healthcheck:
      enabled: true
    serviceUrl:
      defaultZone: http://$EUREKA_HOST:localhost:$EUREKA_PORT:8761/eureka/

当我转到 eureka 的仪表板时,我可以看到我的聊天服务和网关也已注册。

网关应用中Eureka的配置和聊天服务一样,但是我也有这个:

spring:
  application:
    name: gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true

接下来我还尝试添加不能正常工作的显式路由,但如果我将发现定位器启用设置为true,这应该不需要吧?

  routes:
    - id: chat-service-route
      uri: lb://chat-service
      predicates:
        - Path=** 

我创建了测试端点,我尝试直接在聊天服务和网关上调用。直接呼叫工作正常,因此问题将与路由有关。

@RestController
@RequestMapping
public class TestController 

    @GetMapping
    public String test() 
        return "chat-service ready";
    

我做错了什么?我有点绝望。我正在使用 spring boot 2.2.2 和 Hoxton.RELEASE 云依赖版本

【问题讨论】:

你能解释一下“不起作用”是什么意思吗?你试过什么网址? @spencergibb 对不起,我应该写得更干净。当我从网关调用时,聊天服务中的休息端点总是出现 404 错误 你在网关上调用什么url? @spencergibb 网关在 8080 上运行,所以我调用 localhost:8080/chat-service 聊天服务是否响应/chat-service?否则需要重写路径 【参考方案1】:

尝试删除显式路由并将以下属性添加到应用程序 yml。这对我有用。

spring:
  cloud:
    gateway:
      discovery:
        locator:
          lower-case-service-id: true

【讨论】:

以上是关于Spring Cloud Gateway 默认路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud gateway 某些路由中跳过全局过滤器

Spring Cloud Gateway 5 权重路由

spring cloud gateway网关路由分配

Spring Cloud Gateway 和 DiscoveryClient 路由

Spring Cloud —— Gateway 服务网关

Spring Cloud-Gateway网关