1. eureka server端实例存储结构
ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>>
其中key = appName,value = ConcurrentHashMap
//存储覆盖状态
protected final ConcurrentMap<String, InstanceStatus> overriddenInstanceStatusMap = CacheBuilder
.newBuilder().initialCapacity(500)
.expireAfterAccess(1, TimeUnit.HOURS)
.<String, InstanceStatus>build().asMap();
1.1 eureka server status
状态 |
描述 |
starting |
实例初始化状态,此状态主要给实例预留初始化时间 |
down |
当健康检查失败时,实例的状态转变到down |
up |
正常服务状态 |
out_of_service |
不参与接收服务 。但是服务正常 |
unknown |
未知状态 |
1.2 与server status有关的方法
方法 |
描述 |
调用场景 |
register |
注册实例 |
1.实例启动的时候开始注册;2.心跳404时开始注册实例 |
cancel |
取消server注册的某一实例 |
客户端shutdown实例后,调用cancel |
renew |
续租请求 |
客户端定时心跳时调用该方法。deleteStatusOvrride方法调用后会触发renew续租失败,触发重新注册实例。 |
statusUpdate |
状态更新方法 |
主要调用的时机时让此service下线,不在接收请求。或者让下线的服务重新上线。 |
deleteStatusOverride |
移除实例的覆盖状态 |
实例的覆盖状态移除后,覆盖状态将变成unknown |
2.假如InstanceInfo中只有status状态
- client端调用updateStatus更新实例状态到out_of_service 。即status = out_of_service。此时client的状态是up状态
- server端此实例的状态现在是out_of_service。并且标记responseCache无效。
- 客户端等待定时器定时更新实例的状态。但是由于时间间隔没有更