精华内容
下载资源
问答
  • dubbo源码解读

    2017-11-03 15:10:05
    dubbo源码解读

    dubbo源码解读


    展开全文
  • Dubbo源码解读

    2021-05-20 16:10:57
    DUBBO源码解读-初始化 初始化过程 dubbo源码中样例初始化时采用自定义标签,之后解析DubboNamespaceHandler 1,主要是DubboNamespaceHandler extends NamespaceHandlerSupport,执行init和parse init方法主要是注册...

    DUBBO源码解读-初始化

    初始化过程

    dubbo源码中样例初始化时采用自定义标签,之后解析DubboNamespaceHandler

    1,主要是DubboNamespaceHandler extends NamespaceHandlerSupport,执行init和parse
    init方法主要是注册xml对应的自定义类;parse中最关键是注册了DubboApplicationListenerRegistrar

        @Override
        public BeanDefinition parse(Element element, ParserContext parserContext) {
            BeanDefinitionRegistry registry = parserContext.getRegistry();
            registerAnnotationConfigProcessors(registry);
            /**
             * @since 2.7.8
             * issue : https://github.com/apache/dubbo/issues/6275
             */
            registerCommonBeans(registry);
            BeanDefinition beanDefinition = super.parse(element, parserContext);
            setSource(beanDefinition);
            return beanDefinition;
        }
    
        registerInfrastructureBean(registry, DubboApplicationListenerRegistrar.BEAN_NAME,
                    DubboApplicationListenerRegistrar.class);
    

    2,DubboBootstrapApplicationListener在DubboApplicationListenerRegistrar创建之后起到监听的作用,之后启动dubbo的启动类

        private void onContextRefreshedEvent(ContextRefreshedEvent event) {
            dubboBootstrap.start();
        }
    

    后续继续

    展开全文
  • Dubbo源码解读 — 注册中心的实现 Dubbo源码解读 — 注册中心的实现0、概述1、注册中心的工作流2、注册中心的数据结构3、Redis注册源码跟读4、源码跟读记录的知识点 本源码解读dubbo版本为:2.7.6,今天主要阅读...

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 

    Dubbo源码解读 — 注册中心的实现

    Dubbo源码解读 — 注册中心的实现  0、概述  1、注册中心的工作流  2、注册中心的数据结构  3、Redis注册源码跟读  4、源码跟读记录的知识点

    本源码解读dubbo版本为:2.7.6,今天主要阅读注册中心源码Redis的实现,从Redis实现原理发现,发现两个问题:

    1、如果服务宕机,就会造成服务没有广播?

    2、Redis的发布订阅通道并不是消息可靠的,如果使用集群,主节点挂了,从节点数据没有同步?

    以上两个会导致订阅方不知道服务方已经下线,该如何解决?资料查询需要依赖服务治理中心

    0、概述

    • 注册中心的作用:

      • 动态加入:服务提供者通过注册中心动态把自己暴露给消费者,无需消费者更新配置文件

      • 动态发现:一个消费者可以动态地感知新的配置,路由规则和新服务提供者,不需要重启服务

      • 动态调整:参数调整,自动更新相关服务节点

      • 统一配置:

    • Dubbo注册中心源码在dubbo-registry模块下:

    dubbo-registry-api API和抽象实现类
    dubbo-registry-default 基于内存的默认实现
    dubbo-registry-multicast 
    dubbo-registry-zookeeper zk实现
    dubbo-registry-redis redis实现
    dubbo-registry-consul 服务网格实现
    dubbo-registry-etcd3
    dubbo-registry-nacos nacos实现
    dubbo-registry-multiple
    dubbo-registry-sofa
    dubbo-registry-eureka

    1、注册中心的工作流

     

    2、注册中心的数据结构

    • ZooKeeper

      ZK是树形结构的注册中心,节点有持久、持久顺序、临时、临时顺序 【Zk使用场景

      对Dubbo,Zk会创建持久、临时节点,对顺序无要求

    • Redis

      Redis使用Key/Map

    3、Redis注册源码跟读

    • 类RedisRegistry

    • 工厂注册

    • RedisRegistryFactory类

    4、源码跟读记录的知识点

    • 订阅发布的实现

      1)Redis 中 key = toCategoryPath(url)即:root+service+type【providers、consumers、routers、configurators】作为key

      private String toServicePath(URL url) {
          return root + url.getServiceInterface();
      }
      private String toCategoryPath(URL url) {
          return toServicePath(url) + PATH_SEPARATOR + url.getParameter(CATEGORY_KEY, DEFAULT_CATEGORY);
      }

      2)Redis订阅发布机制使用的是过期时间和publish/subscribe通道,启动调度线程池不断刷新过期时间

      this.expireFuture = expireExecutor.scheduleWithFixedDelay(() -> {
                  try {
                      deferExpired(); // Extend the expiration time
                  } catch (Throwable t) { // Defensive fault tolerance
                 logger.error("Unexpected exception occur at defer expire time, cause: " + t.getMessage(), t);
                  }
              }, expirePeriod / 2, expirePeriod / 2, TimeUnit.MILLISECONDS);
       
      核心代码: getRegistered从缓存中获取url,然后组装key,过期后就发布
      for (URL url : new HashSet<>(getRegistered())) {
          if (url.getParameter(DYNAMIC_KEY, true)) {
              String key = toCategoryPath(url);
              if (jedis.hset(key, url.toFullString(),         String.valueOf(System.currentTimeMillis() + expirePeriod)) == 1) {
              jedis.publish(key, REGISTER);
              }
          }
      }        
    • 缓存机制

      Dubbo的缓存机制是在AbstractRegistry类中实现的,消费者或服务治理中心会获取注册信息后会在本地做缓存,内存中有一份,也会持久化一份。构造函数中进行的加载

      private final ConcurrentMap<URL, Map<String, List<URL>>> notified = new ConcurrentHashMap<>(); 这个是内存中的缓存对象
      private File file; 文件缓存对象
    • 重试机制

      FailbackRegistry类中实现几种注册,订阅,通知失败(五种)时的重试,启动一个定时任务不断尝试。

       public FailbackRegistry(URL url) {
              super(url);
              this.retryPeriod = url.getParameter(REGISTRY_RETRY_PERIOD_KEY, DEFAULT_REGISTRY_RETRY_PERIOD);
              // 定时任务
              retryTimer = new HashedWheelTimer(new NamedThreadFactory("DubboRegistryRetryTimer", true), retryPeriod, TimeUnit.MILLISECONDS, 128);
          }
    • 设计模式

      从源码可以发现,注册中心使用了模板模式(抽象类提取公共方法)和工厂模式,在工厂类中使用了重入锁(ReentrantLock)控制获取不同的注册形式

      // Lock the registry access process to ensure a single instance of the registry
      LOCK.lock();
      try {
          Registry registry = REGISTRIES.get(key);
          if (registry != null) {
              return registry;
          }
          //create registry by spi/ioc
          registry = createRegistry(url);
          if (registry == null) {
              throw new IllegalStateException("Can not create registry " + url);
          }
          REGISTRIES.put(key, registry);
          return registry;
      } finally {
          // Release the lock
          LOCK.unlock();
      }

    附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:

    (点击右侧 即可打开个人博客内有干货):技术干货小栈
    =====>>①【Java大牛带你入门到进阶之路】<<====
    =====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
    =====>>③【数据库大牛带你入门到进阶之路】<<=====
    =====>>④【Web前端大牛带你入门到进阶之路】<<====
    =====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
    =====>>⑥【架构师大牛带你入门到进阶之路】<<=====
    =====>>⑦【C++大牛带你入门到进阶之路】<<====
    =====>>⑧【ios大牛带你入门到进阶之路】<<====
    =====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
    =====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====

    天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。

    展开全文
  • Dubbo源码解读与实战

    2020-08-18 17:44:16
    最近在学习Dubbo源码(拉钩网的杨四正),先把目录列出来,立个flag, 学完之后,再一节一节慢慢补充。 第一部分:基础知识 Dubbo 源码环境搭建 Dubbo 的配置总线:抓住 URL,就理解了半个 Dubbo Dubbo SPI ...

    最近在学习Dubbo的源码(拉钩网的杨四正),先把目录列出来,立个flag,

    学完之后,再一节一节慢慢补充。

    第一部分:基础知识

    1.     Dubbo 源码环境搭建
    2.     Dubbo 的配置总线:抓住 URL,就理解了半个 Dubbo
    3.     Dubbo SPI 精析,接口实现两极反转(上)
    4.     Dubbo SPI 精析,接口实现两极反转(下)
    5.     海量定时任务,一个时间轮搞定
    6.     ZooKeeper 与 Curator,求你别用 ZkClient 了(上)
    7.     ZooKeeper 与 Curator,求你别用 ZkClient 了(下)
    8.     代理模式与常见实现
    9.     Netty 入门,用它做网络编程都说好
    10.     简易版 RPC 框架实现

    第二部分:注册中心

    1. 本地缓存:降低 ZooKeeper 压力的一个常用手段
    2. 重试机制是网络操作的基本保证
    3. ZooKeeper 注册中心实现,官方推荐注册中心实践

    第三部分:服务通信

    1. Dubbo Serialize 层:多种序列化算法,总有一款适合你
    2. Dubbo Remoting 层核心接口分析:这居然是一套兼容所有 NIO 框架的设计?
    3. Buffer 缓冲区:我们不生产数据,我们只是数据的搬运工
    4. Transporter 层核心实现:编解码与线程模型一文打尽
    5. Exchange 层剖析:彻底搞懂 Request-Response 模型

    第四部分:RPC 功能核心实现

    1. 核心接口介绍,RPC 层骨架梳理
    2. 从 Protocol 起手,看服务暴露和服务引用的全流程
    3. 复杂问题简单化,代理帮你隐藏了多少底层细节?
    4. Filter 接口,扩展 Dubbo 框架的常用手段指北

    第五部分:集群

    1. 集群容错:一个好汉三个帮
    2. 路由机制:请求到底怎么走,它说了算
    3. 负载均衡:公平公正物尽其用的负载均衡策略,这里都有

    第六部分:服务自省、元数据与配置中心

    1. 服务自省设计方案:新版本新方案
    2. 元数据方案深度剖析,如何避免注册中心数据量膨胀?
    3. 配置中心设计与实现:集中化配置 and 本地化配置,我都要

    先把目录列好,目前正在学习当中,慢慢把体会写下来。

    展开全文
  • dubbo源码解读要点

    2020-03-15 10:50:46
    首先我们要关注的是服务的发布和服务的消费这两个主要的流程,那么就可以基于这个点去找到源码分析的突破口。那么自然而然我们就可以想到spring的配置 Spring对外留出的扩展 dubbo是基于spring 配置来实现服务的发布...
  • dubbo源码解读(一)

    2020-01-10 11:03:37
    前几个月就有开始研究dubbo源码,不过基于自己比较懒所以一直也没有深入的去研究,现在也根据自己的整理心得来输出一份自己的解读,当然这一切都是从0开始,自己的解读过程都是实时个人摸索,所以有些不对的地方...
  • import java.lang.reflect.Method; public class AppendAnnotation { /** * 获取某个Annotation实例的所有方法值(实际是Annotation的属性值),并把这些方法的值赋值给调用此方法的类的相关的setter方法。...
  • 在上篇博客Dubbo 服务引入源码分析中详细的分析了服务引入的过程,同时分析过程中也提到了集群聚合多个提供的代码但并未深究,因此本文将对dubbo的集群源码(版本2.7.7)进行详细分析。 文章目录1. Dubbo集群简介2. ...
  • 因此在阅读一个框架源码时要抓住这个框架设计的原则,这样才能容易理解。 Dubbo是阿里巴巴公司开源的一个分布式服务框架,主要功能有:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析...
  • Dubbo源码解读之动态代理

    千次阅读 2018-11-05 15:08:41
    前言 或许我们已悉知Java的动态代理的方式:...dubbo在沿用java的jdk方式外,还采取了javassist方式——通过字节码生成代替反射。 Dubbo代理概览 类图(这里只包括我们比较常用的代理类) 从类图我们可以看出Dubbo...
  • 为每个实现分配一个key 4、在消费端,便可使用上面步骤中定的实现策略(以key指代) dubbo中SPI机制源码解读 在运行的时候会通过一个叫做ExtensionLoader的加载器来进行dubbo的扩展点加载 拿消费端的Reference标签...
  • 最近心血来潮,把dubbo的源码又翻了一遍,写些读后感,供大家共同进步,这里的源码解读,用的dubbo2.7.8的版本,需要下载源码的小伙伴,可以到github上面下载源码:https://github.com/apache/dubbo;本篇文章,...
  • 上一篇对解读dubbo做了简短的模块划分并且定义了阅读入口,这一次就针对dubbo-common来进行解读 1、首先来看个简单的东西, org.apache.dubbo.common.Version 进入源码看到有一个静态块,静态块内有一个校验类...
  • 搭建环境之前,先看官网介绍,大致了解Dubbo的架构思想,这个可以帮助你后面更好的了解Dubbo的基本功能以及核心角色 Registry:注册中心 负责服务地址的注册与查找,服务Provider和Consumer只在启动时与注册中心...
  • 从ReferenceConfig可以很明显地看出dubbo是如何启动,下面是ReferenceConfig的init()方法内容,后续dubbo-config-spring中spring创建dubbo应用最终也会调用到此方法中,下面我们将对该方法中的源代码进行解读。...
  • 本系列文章主要是对dubbo源码解读学习dubbo的架构设计。  dubbo被重启维护后更新了许多bug以及对一些jar包的升级,目前dubbo项目主要有以下模块构成。 转载于:...
  • 众所周知,Dubbo 是阿里巴巴公司自主研发开源的一个高性能的服务框架(现已捐献给 Apache 基金会组织),应用之间可以通过 RPC 的方式来互相调用并返回结果。主要基于 Java 语言开发,它提供了三大核心能力: 1. ...
  • DubboNamespaceHandler DubboNamespaceHandler继承了NamespaceHandlerSupport。因此不需要实现所有的解析工作,只要将自定义schema中的元素... ... * dubbo xml 配置解析的入口类 * @export */ public clas...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 389
精华内容 155
关键字:

dubbo源码解读