从头开始写一个迷你的dubbo,仅用作学习用,学习的过程中更深入的了解下dubbo,同时也补充下其他的知识。
java rpc机制简介
java rpc机制简单来说就是服务调用者把要调用的接口名,方法名,参数等通过网络传给服务提供者。服务提供者监听到调用者发来的消息解析出要调用的哪个接口的哪个方法,以及入参等信息然后用动态代理执行,最后把执行的结果通过网络传输给调用者。 后话:通常为了保证网络传输的效率一般用netty实现网络传输,为了实现集群等高可用搞负载还需有注册中心,负载均衡,网关等协助实现。工程说明
mini-dubbo-provider
服务提供者端,主要是暴露服务,处理消费者端请求等
mini-dubbo-consumer
服务消费者端,主要作用是引用服务
mini-dubbo-common
一些公用类
mini-dubbo-sample-*
sample是示例项目
目标
- 可以使用API和Spring两种方式启动
- 提供完整暴露服务和服务引用功能
- 提供多协议支持
- 实现注册中心支持
- 提供自定义编解码
- 使用Netty和Mina
- 提供对多种序列化的支持
已有实现
- 可以使用API启动
- 简单的暴露和服务引用
- 现使用TCP协议
- 使用Netty
- 使用Netty的编解码
- 使用Java序列化方式
源码地址
https://github.com/dachengxi/mini-dubbo
过程
现在的版本就是一个简单的RPC调用功能。下面是大概的过程:
- 服务提供者端DubboProvider,这是API,用来启动服务暴露的功能,会调用Netty实现的服务端暴露服务,并监听处理。
- 编写Netty服务和Handler。
- 实现请求和相应分别对应的两个bean:Request和Response。
- 服务消费者端DubboConsumer,这是API,用来初始化消费者,和调用服务提供者。实际应该是先获取代理,在真正使用的时候采取调用服务提供者端,现在都在一步中完成了。
- 编写获取代理类DubboConsumerProxy。
- 编写Netty客户端和Handler。
- 测试都在sample的模块下。
还有很多要做的~加油!!