zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    K2 的Workspace 遭遇400 RequestLength 错误修复
    从APM角度上看:NoSQL和关系数据库并无不同
    Mono的Google Native Client(NaCl)技术支持
    FastReport.Mono 一款为Mono Framework设计的功能全面的报表生成工具
    修改 Windows Host 文件工具
    采用Mono进行移动开发图书推荐
    MonoDevelop添加NuGet支持
    WCF Service Hosting的线程关联性Mono实现比.NET统一?
    [转]WiX v3.7——支持MSBuild、自更新及引用计数
    [转]度量驱动开发
  • 原文地址:https://www.cnblogs.com/caiyao/p/14948409.html
Copyright © 2011-2022 走看看