1. 程式人生 > >基於SpringCloud+不同主機上的微服務相互呼叫報錯:java.net.UnknownHostException:主機名

基於SpringCloud+不同主機上的微服務相互呼叫報錯:java.net.UnknownHostException:主機名

專案背景:採用Spring Cloud+IEDA+Maven搭建了由多個微服務組成的專案,部署上線是用的是Docker容器技術。

問題描述:部署上線過程中,各個微服務都正常啟動,而且都註冊到了eureka註冊中心,但是相互呼叫時報java.net.UnknownHostException:主機名的錯誤。

原因分析:各個微服務是以“主機名:服務名:埠”的形式註冊到註冊中心。當本地測試時,主機是同一個,為localhost,所以能找到主機並相互呼叫。當部署上線時,每個微服務執行在不同主機,主機名都各不相同,所以呼叫時找不到目標主機在哪。

解決方法:讓微服務以“ip:埠”的形式註冊,這裡的ip指的是部署的主機ip。 我的Spring Cloud版本:

<spring-cloud.version>Finchley.SR1</spring-cloud.version>

在application.properties中新增

eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=ip地址:埠

其中,ip地址可以更換為http://域名,親測可用。