eureka的client注册到server时默认是使用hostname而不是ip(这种情况不总是发生),这就导致服务间相互调用时也会使用hostname进行调用,从而调用失败。
报异常:java.net.UnknownHostException: iZbp1fgdu6lt0h7c8rvw9aZ
这时候就需要使用ip来服务到eureka-server上,需要在eureka的client增加配置如下:
eureka.instance.prefer-ip-address=true
http://www.itmuch.com/spring-cloud-code-read/spring-cloud-code-read-eureka-registry-ip/https://blog.csdn.net/soulfight/article/details/77096632
这篇文章从源码的角度阐述了为什么
实践:
<groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.SR2</version>
实验1:
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port}
仅修改了主机名,但是暴露的ip地址client是无法访问的:
实验2:
eureka.instance.prefer-ip-address=true
未修改主机名,但是ip可以访问
小结:
eureka.instance.instance-id仅关心实例id,真正注册ip到eureka且被client访问的是eureka.instance.prefer-ip-address
附一个加版本号的实例id写法:
#eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${spring.application.name}:${server.port}:@project.version@