Heroku部署Spring Boot Eureka微服务调用时出现UnknownHostException问题
Heroku部署Eureka微服务UnknownHostException异常解决方案
该异常本质是RestTemplate没有通过Eureka服务发现解析服务名,直接将ratings-data-service这类服务名当作域名进行DNS解析,最终找不到对应主机,可按以下步骤逐一排查修复:
1. 检查RestTemplate是否加@LoadBalanced注解
Spring Cloud要实现服务名调用,必须给RestTemplate实例添加@LoadBalanced注解开启负载均衡与服务发现能力,在启动类或配置类中补充如下配置:
@Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); }
2. 校验服务注册与服务名匹配
- 访问Eureka Server控制台,确认
ratings-data-service、movie-info-service两个服务已经成功注册到注册中心 - 检查被调用服务的
spring.application.name配置,必须和调用URL中的服务名完全一致(大小写敏感),比如RatingService的应用名必须配置为ratings-data-service,不能有拼写、大小写差异
3. 激活Heroku环境的cloud配置profile
你在配置中拆分了本地与cloud环境的配置段,部署到Heroku时需要手动激活cloud profile:在每个微服务的Heroku环境变量中添加SPRING_PROFILES_ACTIVE=cloud,确保eureka实例的公网域名、端口配置生效
4. 修正Eureka Server的配置错误
你提供的Eureka Server配置存在结构错误,enableSelfPreservation是eureka.server下的配置项,错误写到了外层server节点下,同时重复定义了server配置段,修正后如下:
server: port: ${PORT:8761} eureka: client: registerWithEureka: false fetchRegistry: false server: waitTimeInMsWhenSyncEmpty: 0 enableSelfPreservation: false
5. 校验APPLICATION_DOMAIN环境变量配置
每个微服务在Heroku的环境变量中都需要配置APPLICATION_DOMAIN,值为当前应用的Heroku公网域名(格式为xxx.herokuapp.com),确保服务注册到Eureka的实例地址是公网可访问的有效地址
6. 依赖与版本校验
确认每个微服务都引入了spring-cloud-starter-netflix-eureka-client依赖,同时Spring Cloud与Spring Boot的版本兼容,版本不匹配会导致服务发现组件失效
内容的提问来源于stack exchange,提问作者YellowFootMountain
相关产品推荐
相关产品推荐

