博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dubbo集群之Directory模块
阅读量:6073 次
发布时间:2019-06-20

本文共 1896 字,大约阅读时间需要 6 分钟。

在Cluster入口处,当走到step4时,就会涉及到Directory了。

先看下Directory的类图

step4时首先进入

//AbstractDirectorypublic List
> list(Invocation invocation) throws RpcException { //抽象方法,子类实现 List
> invokers = doList(invocation);//5 RegistryDirectory.doList-->6 7 // 根据路由规则,找出 Invoker 集合 List
localRouters = this.routers; // local reference 本地引用,避免并发问题 if (localRouters != null && !localRouters.isEmpty()) { for (Router router : localRouters) { if (router.getUrl() == null || router.getUrl().getParameter(Constants.RUNTIME_KEY, false)) { invokers = router.route(invokers, getConsumerUrl(), invocation);//6 } } } return invokers; }//RegistryDirectorypublic List
> doList(Invocation invocation) { List
> invokers = null; Map
>> localMethodInvokerMap = this.methodInvokerMap; // local reference if (localMethodInvokerMap != null && localMethodInvokerMap.size() > 0) { String methodName = RpcUtils.getMethodName(invocation); Object[] args = RpcUtils.getArguments(invocation); if (args != null && args.length > 0 && args[0] != null && (args[0] instanceof String || args[0].getClass().isEnum())) { //way1.根据第一个参数枚举路由。用不到。忽略 invokers = localMethodInvokerMap.get(methodName + args[0]); } if (invokers == null) { //way2.根据方法名获得 Invoker 集合(基本到这里就会找到) invokers = localMethodInvokerMap.get(methodName); } //way3.使用全量 Invoker 集合 if (invokers == null) { invokers = localMethodInvokerMap.get("*"); } if (invokers == null) { //way4.使用 methodInvokerMap 第一个 Invoker 集合。防御性编程。 Iterator
>> iterator = localMethodInvokerMap.values().iterator(); if (iterator.hasNext()) { invokers = iterator.next(); } } } return invokers == null ? new ArrayList
>(0) : invokers; }复制代码

转载于:https://juejin.im/post/5bf2cebd6fb9a04a0f64c72d

你可能感兴趣的文章
{{ }} 和ng-bind
查看>>
关于Task的一点思考和建议
查看>>
微信小程序开发及相关设置小结
查看>>
K-means算法原理
查看>>
cesium可视化空间数据1
查看>>
为 .NET Core 设计一个 3D 图形渲染库
查看>>
oracle隐含参数的查看与修改
查看>>
jdbcType与javaType的对应关系
查看>>
IDEA里如何多种方式打jar包,然后上传到集群
查看>>
一个小时学会jQuery
查看>>
lo4j 日志级别
查看>>
BZOJ 2839: 集合计数 [容斥原理 组合]
查看>>
WCF测试小程序
查看>>
MySQL一键安装
查看>>
【Spring源码分析】非懒加载的单例Bean初始化前后的一些操作
查看>>
Android ListView圆角
查看>>
第一个C#控制台程序
查看>>
C语言及程序设计[套餐]课程主页
查看>>
常量指针与指针常量
查看>>
AngularJs ng-change事件/指令(转)
查看>>