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

调用db-service时遇java.net.UnknownHostException异常求助

解决Eureka服务调用时的java.net.UnknownHostException: db-service异常

你遇到的这个问题核心原因很明确——你的RestTemplate没有开启服务发现与负载均衡能力,我来给你详细拆解:

问题根源

当你用http://db-service/rest/db/xxx这种服务名格式调用Eureka注册的服务时,原生的RestTemplate并不认识这个服务名,它会把db-service当成普通域名去DNS解析,自然就会抛出未知主机的异常。

而直接用http://localhost:8300/rest/db/xxx能成功,是因为你直接指定了服务的具体IP和端口,跳过了服务名解析的步骤。

正确解决方案

你其实已经写出了正确的配置,只需要确保给RestTemplate的Bean加上@LoadBalanced注解,让它具备服务名解析能力:

@Configuration
public class Config {
    @Bean
    @LoadBalanced // 关键注解:开启负载均衡与Eureka服务名解析
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

之后在业务代码中正常注入这个RestTemplate,用服务名调用就可以正常工作了:

@Autowired 
RestTemplate restTemplate;

ResponseEntity<List<String>> quoteResponse = restTemplate.exchange(
    "http://db-service/rest/db/" + userName, 
    HttpMethod.GET, 
    null, 
    new ParameterizedTypeReference<List<String>>() {} 
);

原理补充

加上@LoadBalanced注解后,Spring Cloud会自动给RestTemplate添加一个拦截器。这个拦截器会在请求发送前,从Eureka注册中心获取db-service对应的所有服务实例信息,把服务名替换成具体的IP+端口,同时还能自动实现多实例的负载均衡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:08:45