SpringCloud源码:服务端分析(一)

背景从昨日的两篇文章:SpringCloud源码:客户端分析(一)- SpringBootApplication注解类加载流程、SpringCloud源码:客户端分析(二)- 客户端源码分析。我们理解了客户端的初始化,其实跟SpringBo

SpringCloud源码:服务端分析(一)

背景

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

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

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

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

EurekaServer:各类REST请求处理

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

代码语言:javascript代码运行次数:0运行复制
/com/netflix/eureka/eureka-core/1.10.7/eureka-core-1.10.7.jar!/com/netflix/eureka/resources

源码:PeerReplicationResource

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

comflix.eureka.resources.PeerReplicationResource#dispatch

代码语言:javascript代码运行次数:0运行复制

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的注入&拦截应用

发布者:admin,转转请注明出处:http://www.yc00.com/web/1755024739a5227969.html

相关推荐

  • SpringCloud源码:服务端分析(一)

    背景从昨日的两篇文章:SpringCloud源码:客户端分析(一)- SpringBootApplication注解类加载流程、SpringCloud源码:客户端分析(二)- 客户端源码分析。我们理解了客户端的初始化,其实跟SpringBo

    1月前
    150

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信