You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Gateway集成Eureka使用lb://服务名路由返回404问题求助

问题根因与解决办法

常见原因1:服务名匹配异常

Eureka默认将注册的服务名转为大写存储,Spring Cloud LoadBalancer默认大小写敏感,若业务服务的spring.application.name和网关lb://后的服务名大小写不匹配,会导致路由无法找到对应实例。

解决办法

  1. 核对业务服务的spring.application.name配置,确保与lb://MY-SERVICE的服务名完全一致
  2. 若需要兼容小写服务名,可在网关添加如下配置:
spring:
  cloud:
    loadbalancer:
      ribbon:
        enabled: false # 兼容旧版本无Ribbon依赖的场景
      discovery:
        client:
          lower-case-service-id: true # 开启小写服务名匹配

常见原因2:Eureka实例注册信息错误

业务服务注册到Eureka时,若端口、IP配置异常,会导致网关拉取到错误的实例地址,触发404。

解决办法

  1. 打开Eureka控制台,找到MY-SERVICE服务的实例列表,点击实例的status链接,确认跳转的地址端口是否为4001
  2. 若端口错误,删除业务服务中手动配置的eureka.instance.non-secure-port,让Eureka自动识别服务启动端口即可。

常见原因3:自动路由与自定义路由冲突

你当前配置了spring.cloud.gateway.discovery.locator.enabled=true,该参数会开启网关自动根据服务名生成路由规则,可能和你手动配置的自定义路由产生优先级冲突,导致路径匹配异常。

解决办法

将网关配置中的spring.cloud.gateway.discovery.locator.enabled改为false,禁用自动路由规则即可。

常见原因4:负载均衡依赖缺失

Spring Cloud 2020.0(Ilford)及以上版本移除了默认的Ribbon依赖,若未手动引入Spring Cloud LoadBalancer,lb://协议的路由会出现寻址异常。

解决办法

在网关的项目依赖中添加负载均衡组件:

<!-- Maven依赖示例 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

常见原因5:上下文路径不匹配

若业务服务配置了server.servlet.context-path(Spring MVC)或spring.webflux.base-path(WebFlux),会导致转发的路径和业务服务实际监听的路径不匹配。

解决办法

根据业务服务的上下文路径配置,调整路由的路径过滤器,示例如下:

spring:
  cloud:
    gateway:
      routes:
        - id: my-service-route
          uri: lb://MY-SERVICE
          predicates:
            - Path=/api/my/service/**
          filters:
            - StripPrefix=0 # 保留完整路径转发,若需要截断前缀可调整为对应数值

内容的提问来源于stack exchange,提问作者Rafael Bandeira Rodrigues

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:06:03