Eureka服务发现异常:WebClient无法解析服务名致连接拒绝
问题分析与解决方案
核心问题
你的order-service没有配置Eureka客户端的服务发现地址,导致它无法从Eureka Server获取inventory-service的实例信息,没法通过服务名解析出实际网络地址,因此触发连接拒绝错误。
修复步骤
给order-service添加Eureka客户端依赖
Maven项目在pom.xml中添加:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>Gradle项目在
build.gradle中添加:implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'完善order-service的配置文件
在application.properties中添加Eureka服务地址:eureka.client.service-url.defaultZone = http://localhost:8761/eureka(注:
register-with-eureka和fetch-registry默认都是true,无需额外配置,若有特殊需求可显式调整)优化WebClient的使用方式
你当前的@LoadBalanced注解配置是正确的,但建议直接注入构建好的WebClient实例,避免重复创建:@Configuration public class WebClientConfig { @Bean @LoadBalanced public WebClient webClient() { return WebClient.builder().build(); } }业务类中注入使用:
private final WebClient webClient; public OrderService(WebClient webClient) { this.webClient = webClient; } // 调用逻辑 InventoryResponse[] inventoryResponses = webClient.get() .uri("http://inventory-service/api/inventory", uriBuilder -> uriBuilder.queryParam("skuCode", skuCodes).build()) .retrieve() .bodyToMono(InventoryResponse[].class) .block();
关于@EnableEurekaClient与EurekaClient的说明
- 新版Spring Cloud(2020.0.0及以后)不需要添加
@EnableEurekaClient或@EnableDiscoveryClient注解,只要引入Eureka客户端依赖,Spring Boot会自动启用服务注册与发现功能。 - 旧版本需要
@EnableEurekaClient激活客户端,但现在已被自动配置替代。 - 直接使用
EurekaClient接口手动获取实例是旧方案,现在推荐通过带负载均衡的WebClient/RestTemplate,用服务名直接调用,这是Spring Cloud的标准最佳实践。
额外检查项
- 访问
http://localhost:8761,确认inventory-service已成功注册到Eureka Server。 - 检查
inventory-service的随机端口是否被Eureka正确识别。 - 确保两个微服务之间网络通畅,无防火墙或端口占用问题。
内容的提问来源于stack exchange,提问作者Johnyb
相关产品推荐
相关产品推荐

