美文网首页
2019-11-13

2019-11-13

作者: 疯狂的小强_94ee | 来源:发表于2019-11-13 23:17 被阅读0次

1 服务在发起远程调用前,还需要经过哪些环节?能画出流程图吗?

1.1 组装url

List<URL> us = loadRegistries(false);

1.2  获取注册中心的服务

if (urls.size() ==1) {

  // 单注册中心消费

    invoker =refprotocol.refer(interfaceClass,urls.get(0));

} else {

    List> invokers =new ArrayList>();

    URLregistryURL=null;

    for (URL url :urls) {

        // 逐个获取注册中心的服务,并添加到invokers列表

        invokers.add(refprotocol.refer(interfaceClass, url));

      }

}

1.3 注册中心实例

// 创建具体注册中心实例

Registry registry =registryFactory.getRegistry(url);

1.4 底层连接通信,订阅zk节点,增加节点监听器

registry = createRegistry(url);       (工厂模式,模板模式)

1.5 cluster

// 处理订阅数据,并通过Cluster合并多个Invoker

doRefer(cluster, registry, type, url);

1.6 注册消费信息,拉取服务列表

// 注册消费信息到注册中心

registry.register(registeredConsumerUrl);

// 订阅服务提供者,路由和动态配置(第一次发起订阅时会进行一次数据拉取操作,同时触发RegistryDirectory#notify)

directory.subscribe(subscribeUrl.addParameter(Constants.CATEGORY_KEY,

Constants.PROVIDERS_CATEGORY

                +"," + Constants.CONFIGURATORS_CATEGORY

                +"," + Constants.ROUTERS_CATEGORY));

// 通过Cluster合并invokers

Invoker invoker = cluster.join(directory);

2 理解Directory是如何管理Invoker的?重点关注RegistryDirectory的实现

2.1 StaticDirectory

2.2 RegistryDirectory

    2.2.1 对Invoker 做merge

    2.2.2 路由规则过滤

3 理解自定义路由是如何实现的?

根据路由规则,实现过滤invoker

invokers = router.route(invokers, getConsumerUrl(), invocation);

// copy list

routers = routers ==null ?new ArrayList() :new ArrayList(routers);

// append url router

String routerkey =url.getParameter(Constants.ROUTER_KEY);

if (routerkey !=null && routerkey.length() >0) {

    RouterFactory routerFactory =     ExtensionLoader.getExtensionLoader(RouterFactory.class).getExtension(routerkey);

    routers.add(routerFactory.getRouter(url));

}

// append mock invoker selector

routers.add(new MockInvokersSelector());

routers.add(new TagRouter());

Collections.sort(routers);

this.routers = routers;

相关文章

  • 11月13日

    2019-11-13 毛雅亭 字数 638 · 阅读 1 2019-11-11 08:16 ...

  • 2019-11-13

    2019-11-13 【日精进打卡第 599 天 【知~学习】 《六项精进》大纲 4 遍共 2252 遍 《大学》...

  • 文先森的日常--剩33天

    日精进打卡第455天 姓名:李文杰 (四爷); 公司:中国太平人寿; 日期:2019-11-13 【知~学习】 《...

  • 峰言峰语__林海峰每日随感

    峰言峰语--林海峰(森林大海山峰)每日随感 2019-11-13 19:28 2018.11.10 完整的和自己相...

  • MySQL 细致讲解索引

    MySQL 如何正确的使用索引 真致信息技术 2019-11-13 17:46:04 学习索引,主要是写出更快的s...

  • 关于人才培养的内部管理会议的摘要

    时间:2019-11-13 参会:崔文生、云飞、区域经理、园长、部门经理 议题:怎么培养人?怎样识别人?什么样的人...

  • 2019-11-14

    2019-11-13 日精进打卡 姓名:彭新 宁波蓝天白云供应链管理有限公司 【日精进打卡第594天】 【知~学习...

  • 沟通的艺术(2) - 1.2 沟通的历程

    2019-11-13 第一章 人际沟通入门 1.2 沟通的历程 沟通的历程,可以理解或者翻译为,“沟通的过程”更好...

  • 2019-11-13

    2019-11-13 姓名:符振华(379期 反省三组) 公司:深圳蔚蓝时代商业管理有限公司-上海第一分公司 【日...

  • 2019-11-13

    2019-11-13 日精进打卡 姓名:彭新 宁波蓝天白云供应链管理有限公司 【日精进打卡第570天】 【知~学习...

网友评论

      本文标题:2019-11-13

      本文链接:https://www.haomeiwen.com/subject/hgokictx.html