dubbo reference应用router来筛选出优先provider的过程

初始化reference

ReferenceConfig.init

初始化自身的consumerUrl,url上加入methods参数;如果是generic调用,则不配置methods参数

ReferenceConfig.createProxy生成stub

RegistryProtocol.refer创建AbstractClusterInvoker

先创建一个RegistryDirectory,负责监听interface目录下的配置更新

再用上述RegistryDirectory对象,构造一个AbstractClusterInvoker;
AbstractClusterInvoker负责选取provider实例来发起调用

StubProxyFactoryWrapper.getProxy使用javassist来构建stub;
在线编译的stub类实现了服务的interface,内部使用AbstractClusterInvoker对象进行远程调用

在线更新配置

注册的provider、router发生变化后,客户端会立即进行配置更新

RegistryDirectory.refreshInvoker

RegistryDirectory.toInvokers

更新invoker(provider)列表

RegistryDirectory.toMethodInvokers

根据所有在线invoker的providerUrl申明的methods列表,来整理各个method的可用invoker

根据自身consumerUrl申明的methods列表,和从注册中心获取的router列表,来筛选各个method优先调用的invoker;
如果是generic调用,因为没有在consumerUrl申明methods列表,则不进行筛选;
筛选逻辑放在RegistryDirectory.route方法里,这个方法只会使用非runtime类型的router

router除了runtime属性外,还有一个force属性;当force为false时,如果没有provider满足router的筛选条件,则不用此router进行筛选

发起调用

AbstractClusterInvoker.invoke

AbstractDirectory.list

RegistryDirectory.doList获取method对应的invoker列表

使用runtime类型的router筛选出各个method优先调用的invoker

FailoverClusterInvoker.doInvoke

选择一个invoker发起调用,如提供了可用的重试次数,则在失败后选择另一个invoker重试

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值