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。

  • 相关阅读:
    vue-cli3 打包路径参数说明
    vuex使用map在module的模式下的写法
    普通的JS文件中使用vuex
    vue cli 3+ 版本的source map添加方法
    vue-cli的安装及版本查看/更新
    搭建一个vue项目
    无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    Centos7开放及查看端口
    记录一次idae和maven设置的巨坑
    解决npm安装node-sass太慢及编译错误问题
  • 原文地址:https://www.cnblogs.com/caiyao/p/14948409.html
Copyright © 2011-2022 走看看