编写自己rpc框架——java rpc的实现
2017-08-19 22:48
357 查看
my-rpc
了解dubbo的一些原理后,想尝试自己编写rpc,加深了解。个人对rpc原理的见解
rpc是一种远程过程调用协议。rpc主要功能:异构分布式项目之间的通信,使消费者只需要知道接口,远程调用方法就像调用本地方法一样。要使得消费层只通过接口调用远程实现方法,那么其之间的传输数据肯定是:类、方法、参数、返回值,以及一些其它传输的信息。
之间涉及到通信,肯定要发布服务供客户端请求。客户端要执行未知实现的方法,是通过动态代理实现的。
在了解动态代理的使用后,就会发现,在动态代理的方法执行过程中,可以不用去执行真实方法(invoke方法中),你可以获取到上面所需要的类、方法、参数、返回值等执行方法的参数。
那么把这些参数传输到远程去。在提供层接收到消费层方法的传参后,通过反射执行已经注册的类方法。(提供层要把暴露接口的实现类的方法注册到容器中,供查找)
个人认为dubbo的优势
拥有丰富的通信方式、多种协议。有完善的负载、集群容错、负载均衡机制。
可搭配多种
服务注册中心
自己编写rpc之前的所需的准备
了解了常用rpc框架dubbo的流程。复习了动态代理。复习了java io通信。模块说明
rpc-core
这个模块是rpc的核心部分包括网络通信,客户端动态代理,通信数据结构rpc-service
这个模块rpc提供层暴露的接口rpc-provider
这个模块是rpc的提供层rpc-consumer
这个模块是rpc的消费层依赖关系
rpc-consumer、rpc-provider为rpc使用方,所以他们两个都依赖 rpc-core 模块。因为提供层要为消费层暴露接口,所以提取了公共接口,因此,它们两个都依赖rpc-service
启动调试
使用HelloService接口进行调试。首先运行zookeeper服务,默认本地ip。接着启动提供层:在rpc-provider模块中运行top.yuyufeng.rpc.ServerApp.Main然后启动消费层:在rpc-consumer模块中运行top.yuyufeng.rpc.test.ClientApp.Main
缺陷
netty通信过程中异常的解决\丢失有待完善(netty的应用优待改进)负载均衡有待增加
…(细节有待实现)
版本说明
项目随着主干进行下去* master 在上个版本基础上,增加使用Spring方式启动服提供层
* v3 在上个版本基础上,使用Netty4来操作NIO通信,不再是原来的多线程BIO。改变了通信方式,结构变化较大
* v2 在上个版本基础上,增加zookeeper注册发现,客户端服务端无需互相知道对方。增加Protostuff序列化(序列化效率高)
* v1 原始版本(bio多线程通信 客户端服务端直连)
更新日志
2017年8月29日 增加Sping启动服务端之前初始版本已经建立分支https://github.com/yyfyyf1994/my-rpc/tree/v3
2017年8月28日 将原来的BIO通信改成了NIO,加入*Netty4进行通信
之前初始版本已经建立分支https://github.com/yyfyyf1994/my-rpc/tree/v2
2017年8月24日 使用*zookeeper来作协调服务注册与发现,使用Protostuff序列化(取代jdk序列化)
之前初始版本已经建立分支https://github.com/yyfyyf1994/my-rpc/tree/v1
相关文章推荐
- 分布式学习笔记1通过Java自己实现简单的HTTP RPC框架
- 3.第三单元任务二实训:使用作业提交系统提交Java作业时 ,需要输入Java源代码文件名和自己的邮箱,提交前对Java文件名以及邮箱进行有效检查。编写程序实现对输入的Java源文件名以及邮箱有效性的
- Java实现一个简单的RPC框架(二) 协议
- java实现简单的RPC框架(源码)
- Java实现一个简单的RPC框架(六) 注册机制
- 自己动手实现FleaJAVA框架 -- vb2005xu自己动手系列
- 实现java RPC框架
- 实现java RPC框架
- Java实现简单的RPC框架
- Java实现一个简单的RPC框架(四) 编码和解码
- Java实现简单的RPC框架
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- 使用Java实现简易RPC框架
- Java实现一个简单的RPC框架(七) 反射机制调用类函数
- 用java robot编写自己的机器人,实现自动测试
- Java实现简单的RPC框架
- 11 csdn java 王少飞-编写自己的JDBC框架
- 自己编写的一个java简单的窗口实现两点求园面积
- Java利用Sping框架编写RPC远程过程调用服务的教程
- Java实现一个简单的RPC框架(一) 本地调用