从早期的lamp(linux、apache、mysql、php)架构到分布式集群部署,创造服务的架构层出不穷,dubbo作为处理分布系统中地址维护、降级容错以及限流监控架构中十分优秀的框架,值得分析学习下。
温馨提示:本文只讲dubbo的实现源码,如果研究dubbo的使用,请参考别的文章!
温馨提示:本文只讲dubbo的实现源码,如果研究dubbo的使用,请参考别的文章!
温馨提示:本文只讲dubbo的实现源码,如果研究dubbo的使用,请参考别的文章!
内容摘要
1. dubbo简介
2. dubbo扩展机制spi源码欣赏;
3. dubbo源码服务发布流程;
4. dubbo服务引用源码分析;
5. dubbo服务调用源码欣赏-消费端;
6. dubbo服务调用源码欣赏-服务端;
7. 手写dubbo调用原理
1. dubbo简介
参考链接:[dubbo官网](http://dubbo.apache.org/zh-cn/docs/dev/design.html)
相信大家dubbo的这张依赖图都看过吧:

图中我们可以看到dubbo的想法很实用,provider做为服务方,consumer作为消费方,registry作为注册中心,这就好比:provider好比某皮革厂小p和大p,consumer好比某皮革采购方小c,registry好比互联网。小c通过互联网查到有小p和大p两个皮革厂,就开始选择用个皮草厂的产品(这个时候会有很多策略),最终小c选择了大p皮革厂,就开时和大p签合同购买皮革(这就是调用invoke过程),最中大p将货物发给了小c,完成一次交易-----小c和大p此次通话购物,在dubbo中有个名称叫Invocation会话域,此次通过结束,会话域就完了。
刚才说到了invocation会话域,在dubbo的领域模型设计很有值得我们玩味的东西,引用官方说法:
1. Protocol 是服务域,它是 Invoker 暴露和引用的主功能入口,它负责 Invoker 的生命周期管理。
2.Invoker 是实体域,它是 Dubbo 的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
2.Invocation 是会话域,它持有调用过程中的变量,比如方法名,参数等。
好了,闲言少叙,书归正文,如果想看具体dubbo架构整体架构,还是去看http://dubbo.apache.org/zh-cn/docs/dev/design.html官网介绍吧,下面我们直入我们的主题,那我们先看下我们要演示的示例:
spi
Protocol adaptiveExtension = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension()
服务发布
<dubbo:registry id="nina-register2" address="127.0.0.1" port="2181" protocol="zookeeper" file="/Users/kai.yang/Documents/学习/dubbo"/>
<dubbo:protocol id="dubbo" port="20880" name="dubbo" server="netty4" client="netty4"/>
<dubbo:service interface="com.alibaba.dubbo.kai.api.TestApi" ref="testApi" version="0.0" />
消费引用
<dubbo:registry id="nina-register" address="127.0.0.1" port="2181" protocol="zookeeper"/>
<dubbo:reference interface="com.alibaba.dubbo.kai.api.TestApi" id="TestApi" protocol="dubbo" check="true" version="0.0" timeout="1000000"/>
调用
ClassPathXmlApplicationContext classPathXmlApplicationContext=new ClassPathXmlApplicationContext("dubbo-client.xml");
classPathXmlApplicationContext.start();
TestApi bean = classPathXmlApplicationContext.getBean(TestApi.class);
System.out.println(bean.go());
System.in.read();
好了,下面开始表演!
下一节 dubbo扩展机制spi源码
网友评论