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

Spring Cloud Feign集成Eureka服务发现报404问题求助

排查Feign结合Eureka服务发现时的404异常

我来帮你拆解这个问题——这种指定url就正常、不指定就404的情况,基本都是服务发现链路或者路径匹配出了问题,咱们一步步排查:

最可能的核心原因:路径前缀缺失

你指定url时用了http://192.168.199.229:8091/crawler,这说明服务端的接口是挂在/crawler这个前缀下的,但你的Feign接口可能没加上这个前缀。

举个例子:

  • 服务端Controller是这样的:
@RestController
@RequestMapping("/crawler") // 这里有前缀
public class CrawlerController {
    @GetMapping("/queryAllConditions")
    public Object queryAllConditions(String a, String b) {
        // ...
    }
}
  • 但你的Feign接口只写了:
@FeignClient(name = "CRAWLER-SERVICE")
public interface CrawlerServiceApi {
    @GetMapping("/queryAllConditions") // 没加/crawler前缀
    Object queryAllConditions(String a, String b);
}

当通过Eureka发现服务时,Feign会拼接成http://CRAWLER-SERVICE/queryAllConditions,但实际服务端的有效路径是http://CRAWLER-SERVICE/crawler/queryAllConditions,自然就404了。

解决方法也很简单:
要么给Feign接口加上完整路径,要么用path属性统一指定前缀:

// 方式1:加完整路径
@FeignClient(name = "crawler-service")
public interface CrawlerServiceApi {
    @GetMapping("/crawler/queryAllConditions")
    Object queryAllConditions(@RequestParam("a") String a, @RequestParam("b") String b);
}

// 方式2:用path属性指定前缀
@FeignClient(name = "crawler-service", path = "/crawler")
public interface CrawlerServiceApi {
    @GetMapping("/queryAllConditions")
    Object queryAllConditions(@RequestParam("a") String a, @RequestParam("b") String b);
}

其他需要排查的点

1. Eureka服务注册与名称匹配问题

  • 先登录Eureka控制台,确认crawler-service(注意大小写!Eureka默认服务名是小写,虽然匹配时不敏感,但最好和FeignClient的name保持一致)是否已经注册成功,实例状态是UP。
  • 如果服务根本没注册到Eureka,Feign自然找不到实例,只能返回404。

2. 依赖与启动类注解是否齐全

  • 检查你的pom.xml(或build.gradle)是否引入了必要依赖:
<!-- OpenFeign依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Eureka客户端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 确认主启动类上添加了@EnableFeignClients(开启Feign扫描)和@EnableDiscoveryClient(开启服务发现):
@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

3. 配置文件是否正确

检查application.yml(或properties)中Eureka的配置是否正确,确保客户端能拉取服务列表:

spring:
  application:
    name: your-consumer-app-name
eureka:
  client:
    service-url:
      defaultZone: http://你的Eureka地址:端口/eureka/
    fetch-registry: true # 开启拉取服务注册列表,默认true但建议显式配置

总结

你遇到的情况大概率是Feign接口路径和服务端实际路径不匹配导致的,先核对路径前缀是否一致,再依次排查服务注册、依赖配置这些环节,应该就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:21:34