• dubbo源码-RegistryProtocol(注册中心和服务提供者的桥梁)


    RegistryProtocol是Protocol的实现类,是注册中心和服务提供者的桥梁,下面分析该类主要的两个方法export(导出服务)、refer(引用服务)的实现流程,分析是如何实现服务导出和服务引用的。

    export:

    export比较简单,先从invoker中抽取出服务提供者url,调用底层protocol(通过SPI 注入的具体protocol,比如dubbo protocol)的export执行导出,然后从invoker抽取出注册中心url,在调用注册中心的factory获取注册中心,最后进行服务的注册。

    refer:

    refer因为涉及到服务提供者是集群提供,所以逻辑比export复杂一些,要依赖directory(前面博客有分析)的功能。

    首先通过invoker的url获取注册中心的url配置信息,然后给获取的注册中心构建ServiceDiscoveryMigrationInvoker invoker。分析下这类Invoker:

    这类Invoker都是以Migration(迁移)开头的,不知道为啥是这个名字,有什么历史故事。MigrationClusterInvoker继承自Invoker主要定义了ServiceDiscoveryInvoker和InterfaceDiscoveryInvoker的刷新操作。

    MigrationInvoker实现了MigrationClusterInvoker接口,底层依赖RegistyProtocol的getServiceDiscoveryInvoker和getInvoker接口获取invoker并刷新自己维护的invoker,而RegistryProtocol这两个方法获取到的Invoker都是ClusterInvoker,唯一的差别的是传入的directory一个是ServiceDiscoveryDirectory,一个是RegistryDirectory,在创建Directory后会在这里调用directory的订阅方法,底层具体实现订阅的注册中心类里,比如zookeeperregistry里在订阅完成以后会在调用DynamicDirectory的notify方法更新他们内部的invoker,这也是主要的注册中心和服务提供者关联的地方。 MigrationInvoker封装了serviceDiscoveryinvoker和interfaceinvoker的选择逻辑,底层还是依赖从RegistryProtocol中拿到的invoker的invoke方法。

    再回到上面RegistryProtocol的refer流程里,获取到MigrationInvoker这个实例后,又调用了定义的registryProtocolListener的onRefer方法,在唯一的实现MigrationRuleListener类中调用了MigrationInvoker的刷新invoker方法初始化MigrationInvoker类中的两个invoker。

    最后返回 MigrationInvoker作为最终的invoker。

  • 相关阅读:
    20165227 结对编程项目-四则运算 第二周
    第八周学习总结
    20165227 结对编程项目-四则运算 第一周
    20165304第4次实验《Android程序设计》实验报告
    20165304《Java程序设计》第九周学习总结
    20165304实验三
    结对编程练习_四则运算(第二周)
    20165304 实验二 Java面向对象程序设计
    20165304 四则运算
    20165304《Java程序设计》第七周学习总结
  • 原文地址:https://www.cnblogs.com/caiyao/p/14948409.html
Copyright © 2020-2023  润新知