专辑目录:SpringCloud学习日志
当服务集群之后,可能存在这种情况:某一个服务器宕机,导致集群服务中有一个无法访问。
由于默认使用轮询方式,所以可能在访问时访问到宕机的服务器导致该次访问失败。
假设十个会员服务器集群中有一个宕机了,那么十次会员服务访问中就会失败一次。
针对这种情况,Eureka默认采用Client端定时向Server端发送心跳包的方式来确认Client端的有效性,
若超过90秒没有收到心跳包,则认为该Client端失效,会将其剔除。
自我保护机制:由于上面提到的机制,
为了防止Client可以正常访问,但只是与Server访问不通,为了防止误剔除Client,
Server会将注册列表保护起来,此时不会再剔除Client。(15分钟内85%的Client没有发送心跳包就会开启)
一般在开发环境,因为eureka不会经常重启,所以我们会关闭自我保护机制
server:(我已经把注册中心的集群改回单机了,记得defaultZone要改回来)
server:
### 端口号
port: 8100
### eureka 配置
eureka:
client:
### 是否需要将自己注册给注册中心? (因为自己是注册中心所以为false,集群的时候要true)
register-with-eureka: false
### 是否需要检索服务中心(因为自己是注册中心,所以为false)
fetch-registry: false
service-url:
### 注册中心的地址
defaultZone: http://127.0.0.1:8100/eureka/
server:
### 在开发阶段,关闭自我保护机制
enable-self-preservation: false
### 剔除服务的间隔,单位:毫秒
eviction-interval-timer-in-ms: 2000
member:
#服务启动端口号
server:
port: 8110
##服务别名(服务注册到eureka使用的名称) 如果有多个相同别名的服务注册,视为集群
spring:
application:
name: app-member
## eureka 配置
eureka:
client:
#### 注册中心的地址
service-url:
defaultZone: http://127.0.0.1:8100/eureka/
## 是否需要注册到eureka
register-with-eureka: true
fetch-registry: true
instance:
### 开发、测试环境中设置间隔比较短
### eureka 客户端向服务端发送心跳的间隔,单位:秒。
lease-renewal-interval-in-seconds: 1
### eureka 服务端在收到最后一次心跳等待的时间上限,单位:秒。超过这个时间就会剔除本服务。
lease-expiration-duration-in-seconds: 2
至于如何验证,我们只要先启动server,然后以端口号1:8110启动member,再以端口号2:8111启动member,
然后关闭其中一个member,再访问就会发现ereka的服务列表已经剔除那个member。
但浏览器中访问还是会访问到关闭的member,因为eureka的缓存,30秒后就不会再访问到关闭的member了