dubbo源码研究之rpc模块

dubbo作为一个服务化框架,rpc模块是dubbo整个框架的核心部分。
我们来通过dubbo来了解rpc调用的本质。
[img]http://dl2.iteye.com/upload/attachment/0122/5558/8dc160fe-e392-33bb-add4-28a1c84d303c.png[/img]
dubbo的rpc模块以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
invoker接口提供两个方法。
Class<T> getInterface(); 获取调用的接口
Result invoke(Invocation invocation) throws RpcException; 执行调用
说明rpc就两件事,第一,定位要调用的是哪个接口,第二发起调用返回结果。
值得注意的是invoker需要Invocation提供的信息,Invocation 支持有本地invoker。invoker不参与Invocation的序列化。Invocation转成request对象通过网络传递并序列化和反序列化。
[img]http://dl2.iteye.com/upload/attachment/0122/5564/c515f65a-f56d-3cd3-a344-8e1f4a073c4d.png[/img]
rpccontext是一个静态工具类,通过threadlocal来保存单次调用的上下文。
Protocol负载invoker的暴露与引用。
[img]http://dl2.iteye.com/upload/attachment/0122/5566/5a5b8039-32c3-3388-9550-8c71b7a00509.png[/img]
一个refer的invoker就会存在一个export的invoker,如果引用的服务不存在,则需要设置<dubbo:consumer check="false" />
暴露服务顺序
[img]http://dl2.iteye.com/upload/attachment/0122/5568/6ddf3e84-ca43-3605-886e-a50d2c511df5.jpg[/img]
引用服务时序
[img]http://dl2.iteye.com/upload/attachment/0122/5570/758937fb-b6cd-3f96-a8ce-dee31e6752a3.jpg[/img]
dubbo的rpc模块也遵守dubbo的整体设计原则采用Microkernel + Plugin模式,Microkernel只负责组装Plugin。
invoker是核心模型,服务方把invoker对象暴露成Exporter对象,并把url描述写入注册中心,注册中心推送到消费方。消费方通过url转成invoker对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值