可伸缩服务架构:框架与中间件读书笔记:dubbo实现原理

前言:

在很久之前就对rpc(远程过程调用)框架非常感兴趣,然后主动去学习了阿里开源框架dubbo,最近阿里也是重启了dubbo的更新,dubbo又重新散发出活力。

当然学习首先是看dubbo官方文档,官方文档有非常详细的功能说明以及使用方法,对于使用dubbo的开发者已经足够了。最近在实习的公司中也有使用到dubbo来编写接口,我辛辛苦苦学习的dubbo框架终于有了用武之地。但我觉得还不够,今天在可伸缩服务架构:框架与中间件一书中看到有dubbo源码解析的一部分,大为惊喜!立刻打开博客开始记录起来。

源码分析:

dubbo初始化是通过spi,spi解释如下:

首先编写dubbo.xml时需要解析dubbo标签:<dubbo:/>,而解析dubbo标签需要以下步骤:

dubbo的核心接口Protocol:

dubbo的URL设计:

dubbo服务暴露过程:

引用服务过程:

FailOverCluster分析:

总结:

服务暴露原理:dubbo的namespacehandler里面会使用serviceconfig来解析dubbo标签获取ref,里面的afterpropertiesset方法将设置service配置以及暴露服务,利用proxyFactory(Javassist增强字节码,内部直接调用方法不是反射调用)的getInvoker方法将服务对象转化为invoker,利用Protocol的export方法将invoker转化为exporter(不同协议),然后放进exporters列表中。Serviceconfig最后监听到ContextRefreshed事件后开始暴露方法,利用netty去绑定端口监听服务调用。

调用服务原理:dubbo的namespacehandler里面会使用referenceconfig来解析dubbo标签获取interface,里面的afterpropertiesset方法将设置reference配置以及返回接口代理对象,利用Protocol的refer方法生成Invoker,利用ProxyFactory将Invoker转化为接口ref。生成接口ref时会根据配置信息产生对应的Cluster,将directory中的多个invoker整合成一个invoker对象。Cluster会根据容错机制调用select方法选择Invoker来调用产生结果返回,select方法里面带有配置信息中的loadbalance参数,select根据loadbalance来选择其中的Invoker返回给Cluster。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值