大致流程图
服务端处理续约
主要是InstanceResource
的renewLease
方法处理客户端来的续约请求。
InstanceResource的renew
进行事件的发送,然后处理。
PeerAwareInstanceRegistryImpl的renew
先处理续约,然后成功的话同步到其他结点。
AbstractInstanceRegistry的renew
先判断实例存不存在,不存在就不处理,存在的话就获取租约Lease
,更新时间lastUpdateTimestamp
,其实就是一个心跳时间,长时间没心跳就会剔除。
public boolean renew(String appName, String id, boolean isReplication) {
RENEW.increment(isReplication);
Map<String, Lease<InstanceInfo>> gMap = registry.get(appName);
Lease<InstanceInfo> leaseToRenew = null;
if (gMap != null) {
leaseToRenew = gMap.get(id);
}
if (leaseToRenew == null) {
RENEW_NOT_FOUND.increment(isReplication);
logger.warn("DS: Registry: lease doesn't exist, registering resource: {} - {}", appName, id);
return false;
} else {
InstanceInfo instanceInfo = leaseToRenew.getHolder();
if (instanceInfo != null) {
// touchASGCache(instanceInfo.getASGName());
InstanceStatus overriddenInstanceStatus = this.getOverriddenInstanceStatus(
instanceInfo, leaseToRenew, isReplication);
if (overriddenInstanceStatus == InstanceStatus.UNKNOWN) {
...
return false;
}
if (!instanceInfo.getStatus().equals(overriddenInstanceStatus)) {
...
instanceInfo.setStatusWithoutDirty(overriddenInstanceStatus);
}
}
renewsLastMin.increment();
leaseToRenew.renew();
return true;
}
}
续约同步
最终是到这里:
创建一个ReplicationTask
任务对象,放入批处理器里处理:
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。