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

Spring Cloud Gateway返回404错误求助

Spring Cloud Gateway 访问PRODUCT-SERVICE返回404的排查与解决

针对你遇到的网关返回404但直接访问服务正常的问题,结合你的配置,从以下几个方向逐一排查:

1. 确认服务发现状态

  • 打开Eureka控制台(http://localhost:8761),检查API-GATEWAY和PRODUCT-SERVICE是否都已成功注册,且PRODUCT-SERVICE的实例状态为UP。
  • 查看网关启动日志,确认是否有拉取PRODUCT-SERVICE实例的记录(比如类似Fetching instance list for service PRODUCT-SERVICE的日志)。如果没有,可在application.properties中添加:
    eureka.client.registry-fetch-interval-seconds=5
    
    缩短实例拉取间隔,确保网关及时获取服务实例。

2. 解决路由配置冲突

你同时启用了服务发现自动路由和手动路由,可能导致匹配逻辑冲突:

  • 自动路由模式下,网关会生成/小写服务名/**的路由规则(因为你设置了lowerCaseServiceId=true),此时访问http://localhost:9090/product-service/products/**应该能转发到服务。
  • 建议先关闭自动路由,专注调试手动路由,在application.properties中修改:
    spring.cloud.gateway.discovery.locator.enabled=false
    
    重启网关后,测试访问http://localhost:9090/products/你的接口路径。

3. 修正路由路径与前缀处理

如果PRODUCT-SERVICE的接口本身没有/products前缀(比如接口是/getAll),需要添加过滤器去掉网关路径中的前缀:
修改application.yml:

spring:
  cloud:
    gateway:
      routes:
        - id: PRODUCT-SERVICE
          uri: lb://PRODUCT-SERVICE
          predicates:
            - Path=/products/**
          filters:
            - StripPrefix=1

这样网关会把/products/getAll转发为/getAll到目标服务。

4. 验证服务名大小写匹配

lb://PRODUCT-SERVICE中的服务名必须和Eureka中注册的名称完全一致(大小写敏感),检查PRODUCT-SERVICE的spring.application.name是否确实为PRODUCT-SERVICE,如果是小写的product-service,则需要同步修改网关中的uri为lb://product-service。

5. 检查路由是否生效

利用你配置的Actuator端点,查看当前网关的路由配置:
访问http://localhost:9090/actuator/gateway/routes,检查返回的JSON中是否包含你的PRODUCT-SERVICE路由,且规则与配置一致。

6. 排查依赖兼容性

你的Spring Boot 3.2.7和Spring Cloud 2023.0.2版本匹配正常,但注意:

  • 不要同时引入spring-boot-starter-web和spring-boot-starter-webflux,当前只引入webflux是正确的(Gateway基于WebFlux实现)。
  • 暂时移除自定义的ServiceDiscovery依赖,确认它不会干扰Eureka客户端的正常工作。

按照以上步骤逐一验证,应该能解决404问题。

内容的提问来源于stack exchange,提问作者Pranjal Katyayan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:25:14