SpringCloud源码:服务端分析(一)- 对Client事件的处理

发布于:2024-10-12 ⋅ 阅读:(183) ⋅ 点赞:(0)

2d34b4e849cbc71317f64cdf756311f3.jpeg

背景

从昨日的两篇文章:SpringCloud源码:客户端分析(一)- SpringBootApplication注解类加载流程SpringCloud源码:客户端分析(二)- 客户端源码分析

我们理解了客户端的初始化,其实跟SpringBootApplication初始化机制息息相关,也和自动化配置类有关。

同时我们也留意到了,客户端的四个动作:注册服务、续约服务、拉取注册列表、取消注册;这4个操作其实是通过定时任务池和异步线程池来协同任务的。

下面我切换一个角度,从Eureka服务端出发,看一下这四个操作的源码。

EurekaServer:各类REST请求处理

相关源码都放到了eureka-core包下面。

/com/netflix/eureka/eureka-core/1.10.7/eureka-core-1.10.7.jar!/com/netflix/eureka/resources

186a00557fdb0dfda66128c117619a06.png

源码:PeerReplicationResource

从dispatch客户端请求开始分析,即:

com.netflix.eureka.resources.PeerReplicationResource#dispatch

private ReplicationInstanceResponse dispatch(ReplicationInstance instanceInfo) {
    ApplicationResource applicationResource = this.createApplicationResource(instanceInfo);
    InstanceResource resource = this.createInstanceResource(instanceInfo, applicationResource);
    String lastDirtyTimestamp = toString(instanceInfo.getLastDirtyTimestamp());
    String overriddenStatus = toString(instanceInfo.getOverriddenStatus());
    String instanceStatus = toString(instanceInfo.getStatus());
    Builder singleResponseBuilder = new Builder();
    switch(instanceInfo.getAction()) {
        case Register:
            singleResponseBuilder = handleRegister(instanceInfo, applicationResource);
            break;
        case Heartbeat:
            singleResponseBuilder = handleHeartbeat(this.serverConfig, resource, lastDirtyTimestamp, overriddenStatus, instanceStatus);
            break;
        case Cancel:
            singleResponseBuilder = handleCancel(resource);
            break;
        case StatusUpdate:
            singleResponseBuilder = handleStatusUpdate(instanceInfo, resource);
            break;
        case DeleteStatusOverride:
            singleResponseBuilder = handleDeleteStatusOverride(instanceInfo, resource);
    }


    return singleResponseBuilder.build();
}

分析代码:

该函数根据instanceInfo的动作类型执行不同的操作,并构建响应:

  • 创建应用和实例资源。

  • 根据动作类型调用不同处理方法:

    • 客户端注册:Register

    • 客户端心跳续约:Heartbeat

    • 客户端取消注册:Cancel

    • 客户端更新状态:StatusUpdate

    • 客户端删除状态:DeleteStatusOverride

  • 使用Builder构建并返回最终的ReplicationInstanceResponse对象。

其他文章

SpringCloud源码:客户端分析(一)- SpringBootApplication注解类加载流程

SpringCloud源码:客户端分析(二)- 客户端源码分析

Kafka消息堆积问题排查

基于SpringMVC的API灰度方案

理解到位:灾备和只读数据库

SQL治理经验谈:索引覆盖

Mybatis链路分析:JDK动态代理和责任链模式的应用

大模型安装部署、测试、接入SpringCloud应用体系

Mybatis插件-租户ID的注入&拦截应用


网站公告

今日签到

点亮在社区的每一天
去签到