翻译成中文大概是:自我保护模式已关闭。如果出现网络/其他问题,这可能无法保护实例过期。
是因为设置
#本地调试 关闭“自我保护”功能,防止已关闭的实例无法被注册中心剔除的问题
eureka.server.enable-self-preservation=false
上一节的学习了单个服务注册的搭建,已经基本了解了服务注册、服务发现的关系;但是在实际生产环境下,为保证服务的可靠性,高可用等,必然要实现服务注册的高可用。
开启自我注册
在单个服务注册的搭建中,为防止自己注册自己设置了两个配置,
##默认eureka会把自己当作一个服务进行注册,禁止注册自己
#由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己
eureka.client.register-with-eureka=false
#该服务作为注册中心,只需维护服务实例,不需要获取服务
eureka.client.fetch-registry=false
若想让服务注册中心高可用,就必须让注册中心也作为服务发现进行注册,因此,需要把以上两个配置设为true。
修改配置文件
----- 配置一 ----
#服务端口
server.port=1111
spring.application.name=eureka-server
#eureka 主机IP
eureka.instance.hostname=peer1
#eureka.instance.hostname=127.0.0.1
##默认eureka会把自己当作一个服务进行注册,禁止注册自己
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
#访问eureka地址
eureka.client.service-url.defaultZone=http://peer2:1112/eureka/
#本地调试 关闭“自我保护”功能,防止已关闭的实例无法被注册中心剔除的问题
eureka.server.enable-self-preservation=true
----- 配置二 ----
#服务端口
server.port=1112
spring.application.name=eureka-server
#eureka 主机IP
eureka.instance.hostname=peer2
##默认eureka会把自己当作一个服务进行注册,禁止注册自己
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
#访问eureka地址
eureka.client.service-url.defaultZone=http://peer1:1111/eureka/
#本地调试 关闭“自我保护”功能,防止已关闭的实例无法被注册中心剔除的问题
eureka.server.enable-self-preservation=true
peer1 上启动的服务注册 作为服务发现 注册到peer2上;而peer2上启动的服务注册 作为服务发现 注册到peer1上;
类似于这种结构:多个服务注册中心相互注册,以实现服务清单的同步,达到高可用的效果。
服务发现-修改配置
#配置服务注册地址
eureka.client.service-url.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/
配置本地主机名
Windows:在改文件中添加
127.0.0.1 peer1
127.0.0.1 peer2
该配置 eureka.instance.hostname 设置的不是 peer1或者peer2 而是 IP的时候 需要添加
#Eureka优先发布服务的IP地址而不是主机名。将eureka.instance.preferIpAddress设置为true,
# 并且当应用程序向eureka注册时,它将使用其IP地址而不是其主机名
eureka.instance.preferIpAddress=true
当peer2开启该配置后,就找不到该服务,显示不可用。
服务续约
# 续约更新时间间隔(默认30秒)
eureka.instance.lease-renewal-interval-in-seconds=5
# 续约到期时间(默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=15