网络上大多是写了一点点。配置得并不算成功,各种抄袭得也不少,很少人会注意到这里是否注册成功,失败会进入unavailable-replicas
特别是ip配置方式,不用去修改host,就更难注册进入;本人尝试了两天,经过好多次得测试配置
注册失败原因
instance:
hostname: ${spring.cloud.client.ip-address} #获取本机ip
prefer-ip-address: true
实际上是不会注册成功得,全部注册失败,如果是本机,想多开得话,会因为本机ip 重复而注册失败,所以如果各位想测试请尽量进行多服务器地址测试,本人是vm装了三台centos7进行测试;
网络流行解决方案1:prefer-ip-address: false ,对于ip配置来说是不可行得;大多解释为cloud不支持ip模式;实际上是支持得;
网络流行解决方案2:
register-with-eureka: false
fetch-registry: false
将以上配置为false,禁止注册中心注册自己,并发现其他服务,也没给出具体解释,自欺欺人,注册和发现服务是注册中心的基本功能;
网络流行解决方案3:虚拟机ip混淆了cloud的ip发现机制
spring:
cloud:
inetutils:
# 可用正则表达式,表示禁用以VMware开头的网络
ignoredInterfaces: ['VMware.*']
# 可用ip地址段表示
preferred-networks: ['192.168']
use-only-site-local-interfaces: true
忽略vm网络段,让cloud能够正常获取ip,实际上也不是这个原因,因为我通过调试得知cloud是可以获取到真实地址的;
我发现即使获取了设置了hostname,配置了prefer-ip-address: true 注册中心中依旧会使用计算机名+端口作为显示;
而这个名称就是instance-id,于是我尝试将ip+端口配置给instance-id;发现注册中心正常显示ip+端口显示了,但是依旧注册失败;
再尝试上面的几个方法,交叉测试,发现不可以将register-with-eureka: false 和retch-registry: false ,最好为默认配置;因为如果不配置的话根本没有注册信息register信息,也就是上面截图的那块;但是依旧注册失败,但是并不是所有的都注册失败,而是其中一台机器成功,一台失败。。哭啊。。
后来,把port 加到hostname里,竟然成功了。。实在没信息调试代码了。。请大家见谅!
最终解决方案:
配置文件
server:
port: 5761
eureka:
server:
enable-self-preservation: true # 设为false,关闭自我保护-测试环境使用
eviction-interval-timer-in-ms: 5000 #续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
instance:
hostname: ${spring.cloud.client.ip-address}:${server.port} prefer-ip-address: true instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} #页面显示的application 名字其实就是这个
# 配置主机名方式
# hostname: localhost-eureka
# prefer-ip-address: true
# ip-address: 192.168.233.129
client:
register-with-eureka: false #向注册中心注册自己
retch-registry: false #检索其他的服务
serviceUrl:
# defaultZone: http://localhost:5761/eureka/
defaultZone: http://192.168.233.129:5761/eureka/,http://192.168.233.130:5761/eureka/,http://192.168.233.131:5761/eureka/