Dubbo源码剖析二之注册中心 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中对注册中心进行了简单的介绍,对Dubbo整合Zookeeper链接源码进行了详细分析.本文接着对服务注册过程源码进行分析. 借图说明服务注册(暴露)流程: 利用之前案例跟踪调试分析上述流程的实现,或者验证该流程: 1)ServiceConfig 类拿到对外提供服务的实际类 ref(如:SleepServiceImpl,具体ref相关内容参考Dubbo服务注册到Zookeeper,对外提供服务的实际类 r…
Dubbo 服务注册&暴露 Dubbo 服务暴露过程是通过 com.alibaba.dubbo.config.spring.ServiceBean 来实现的.Spring 容器 refresh() 完成后,会发送 ContextRefreshedEvent,ServiceBean 会接收到这个 event 然后调用 export(). Dubbo 服务暴露过程: 获取 Invoker Invoker<?> invoker = proxyFactory.getInvoker(T prox…
本章我们将分析一下consumer向注册中心注册,并获取服务端相应的信息,根据这些信息生产代理对象的过程和源码. 1.类图 上图展示了部分消费者注册及生成代理对象过程中需要使用到的类和接口,其中: spring适配涉及到的类:DubboNamespaceHandler.DubboBeanDefinitionParser.ReferenceBean; 配置信息存储:ReferenceConfig.RegistryConfig.MonitorConfig.ProtocolConfig.Consume…
Dubbo调用者需要通过注册中心(例如:ZK)注册信息,获取提供者.但是如果频繁从ZK获取信息肯定会存在单点故障问题,所以Dubbo提供了将提供者信息缓存在本地的方法. Dubbo在订阅注册中心的回调处理逻辑当中会保存服务提供者信息到本地缓存文件当中(同步/异步两种方式),以URL维度进行全量保存.Dubbo具体在服务引用过程中会创建registry对象并加载本地缓存文件,同时优先订阅注册中心,订阅失败后会范围本地缓存文件内容获取服务提供信息. 1.从构造方法入手,主要用于确定需要保存的文件信息…
[源码阅读] 阿里SOFA服务注册中心MetaServer(1) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(1) 0x00 摘要 0x01 服务注册中心 1.1 服务注册中心简介 1.2 SOFARegistry 总体架构 1.2.1 分层 1.3 为什么要分层 0x02 MetaServer 2.1简介 2.2 问题 0x03 代码结构 0x04 启动运行 4.1 集成部署 4.1.1 Linux/Unix/Mac 4.1.2 Windows 4.1.3 启动信息 4.…
[源码阅读] 阿里SOFA服务注册中心MetaServer(2) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(2) 0x00 摘要 0x01 MetaServer 注册 1.1 Leader入口 1.2 注册 1.3 存储服务 1.4 Repository服务 1.4.1 MetaRepositoryService 1.4.2 put操作 1.4.3 节点数据存储 1.5 jraft实现数据一致性 1.6 通知data, session 1.6.1 通知操作 1.6.2 分…
[源码阅读] 阿里SOFA服务注册中心MetaServer(3) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(3) 0x00 摘要 0x01 概念 1.1 分布式一致性 1.2 SOFAJRaft 0x02 基础架构 2.1 RaftExchanger 2.2 RaftServer 2.2.1 RaftServerHandler 2.2.2 ServiceStateMachine 2.3 RaftClient 0x03 相关配置 3.1 RepositoryService接…
接Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)继续分析Adaptive功能实现原理.Adaptive的主要功能是对所有的扩展点进行封装为一个类,通过URL传入参数的时动态选择需要使用的扩展点(参考Dubbo SPI机制之三Adaptive自适应功能 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中案例).其底层的实现原理就是动态代理,这里我们会通过源码的形式告诉大家,他是如何通过动态代理…
上文Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中分析了getExtensionLoader,本文继续分析SPI扩展点实现的getExtension. 通过方法名称不难看出其功能是根据name加载指定扩展点. 通过源码可知getExtension的主要作用是根据name对扩展点进行处理和进行加锁来创建真实的引用,其中都是有使用缓存.在实现过程中使用createExtension方法根据扩展的class…
一.前言 前面有说到Dubbo的服务发现机制,也就是SPI,那既然Dubbo内部实现了更加强大的服务发现机制,现在我们就来一起看看Dubbo在发现服务后需要做什么才能将服务注册到注册中心中. 二.Dubbo服务注册简介 首先需要明白的是Dubbo是依赖于Spring容器的(至于为什么在上篇博客中有介绍),Dubbo服务注册过程也是始于Spring容器发布刷新事件.而后Dubbo在接收到事件后,就会进行服务注册,整个逻辑大致分为三个部分: 1.检查参数,组装URL:服务消费方是通过URL拿到服务提…