1、Eureka 的配置:
多个注册中心需要互相注册。
注册中心:
server:
port: 7001
spring:
application:
name: cloud-eureka
eureka:
instance:
hostname: eureka.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#集群指向其它eureka
defaultZone: http://localhost:7002/eureka/
#server:
#关闭自我保护机制,保证不可用服务被及时踢除
#enable-self-preservation: false
#eviction-interval-timer-in-ms: 2000
注册中心的启动类里面需要加上@EnableEurekaServer 注解。
服务端的配置:
eureka:
client:
#表示是否将自己注册进EurekaServer默认为true。
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
#单机版
# defaultZone: http://localhost:7001/eureka
# 集群版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
# instance:
# instance-id: payment8001
# #访问路径可以显示IP地址
# prefer-ip-address: true
#Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
#lease-renewal-interval-in-seconds: 1
#Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
#lease-expiration-duration-in-seconds: 2
服务端的启动类需要加上@EnableEurekaClient注解
2、Eureka 的自我保护机制
为什么会产生Eureka自我保护机制?
为了防止EurekaClient可以正常运行,但是与EurekaServer网络不通的情况下,EurekaServer 不会立刻将EurekaClient服务剔除。
什么是自我保护模式?
默认情况下,如果EurekaServer在一定时间内没有接受到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了------因为微服务本身是健康的,但是此时本不应该注销这个微服务。Eureka通过“自我保护模式” 来解决这个问题------当EurekaServer 节点在短时间内丢失过多的客户端时(可能发生网络分区故障),那么这个节点就会进入自我保护模式。
Eureka 在自我保护模式中,Eureka会保护服务注册表中的信息,不会注销任何微服务的信息。(属于CAP里面的AP的设计思想)
Eureka 中默认开启自我保护的机制,关闭配置如下:
eureka server(注册中心)
eureka:
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 5000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
eureka client(服务端)
eureka:
instance:
lease-renewal-interval-in-seconds: 5 # 心跳时间,即服务续约间隔时间(缺省为30s)
lease-expiration-duration-in-seconds: 10 # 发呆时间,即服务续约到期时间(缺省为90s)
client:
healthcheck:
enabled: true # 开启健康检查(依赖spring-boot-starter-actuator)
Eureka 2.0以后不在更新