前段时间读了读dubbo框架的源码,粗略的读了暴露服务和引用服务的具体实现,dubbo是一个成熟的rpc框架,里面的功能点和配置很多,了解整个dubbo的代码实现细节的话还真得需要不少时间。为了更快的理解dubbo,参考dubbo的基本原理,自己写了一个简单的RPC框架,实现了远程方法的调用。
dubbo框架用到的技术点
- 1、provider,consumer的配置写在了spring的配置文件中,使用了自己的命名空间dubbo:xx,这里使用的是spring的schema扩展
- 2、 服务端和客户端通信直接用的TCP协议,异步非阻塞IO,使用的netty框架
- 3、涉及到点到点socket通信,对象在网络上传输就要用到序列化工具
- 4、客户端只有接口类,那注入到自己业务类中的dubbo服务bean如何实例化的,这里需要根据接口类生成一个代理类,客户端注入的bean是代理类。这里要用到Java的字节码技术,使用javassist框架
因此,要写一个简单的rpc框架需要用到的工具有:netty通信框架,序列化框架,javassist字节码框架,序列化我用的jboss的marshalling框架,maven依赖如下:
<dependencies>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.20.0-GA</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.14.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.marshalling</groupId>
<artifactId>jboss-marshalling-serial</artifactId>
<version>1.3.19.GA</version>
</dependency>
</dependencies>
建好一个新的项目,添加上面3个maven依赖,然后就可以写自己的rpc框架了,既然模仿的dubbo框架,那这个domo rpc就叫 “ldubbo”了。