【Dubbo服务引用流程】

Dubbo服务引用流程

服务引用

  1. 前置工作还是先解析Dubbo标签;具体的解析过程可以参考另一偏博客,“Dubbo文件解析与暴露服务的过程” 其中将Dubbo的Reference标签解析为ReferenceBean

  2. ReferenceBean实现了FactoryBean接口,所以在引用流程中会调用这个工厂Bean的方法getObject(),这个方法中会 return get()

  3. 接下来就进入到ReferenceConfig中的get()中;首先判断如果ref (这个ref是一个Invoker代理对象)为空的话,就执行初始化init()方法;

  4. init()方法中经过一系列检查属性设置属性之后就会执行一个ref = createProxy(map); 的代码,就是创建一个代理,这个参数map里封装的就一些注册中心地址、调用方法、调用的接口等等信息;将这些信息给这个创建的代理;

  5. 这个创建代理的过程中,也就是createProxy()这个方法中有这样一段代码:refprotocol.refer(interfaceClass,urls.get(0)); 大概的意思就是引用协议远程引用一个接口;而这段代码得到的结果就是一个invoker;

  6. refprotocol是一个Protocol对象, 所以这就涉及到了DubboProtocol和RegistryProtocol,这个protocol对象去调用refer()方法时首先会进入到RegistryProtocol的refer()方法;

  7. RegistryProtocol的 refer() 方法首先会根据注册中心信息得到一个Registry对象,这个对象会在 doRefer() 方法中作为参数;而这个refer()方法最终返回的就是 doRefer() 即就是 return doRefer();

  8. doRefer()方法做的就是在注册中心中 订阅服务/subscribe;之后会去提供者和消费者的注册表中进行注册:ProviderConsumerRegTable.registerConsumer()

  9. 于此同时会去到 DubboProtocol() 中执行 refer() 方法;首先得到一个DubboInvoker对象invoker;
    得到这个invoker对象的内部其实就是连接或者 获取客户端,并将最终信息都封装在invoker对象中;DubboProtocol()的 refer() 最终 return invoker;

  10. 两个Protocol的refer()中得到的Invoker对象会一层一层的往上返回,返回到上述第五步createProxy()中的refprotocol.refer(interfaceClass,urls.get(0)); 然后createProxy()将代理对象创建出来 也就是哪个 ref ,然后 init()的工作就完成了,然后get()方法就会将这个ref 也就是 Invoker代理对象返回给getObject()方法;

至此引用就完成了;

大概的图:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OfficialUser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值