首先,我不是大神,我是跟着大神学习如何手写一个dubbo,每次的学习都写一个学后感,增强消化。
大神文章地址:一起写个Dubbo
项目地址:rpc
dubbo最小实现
借个图:
rpc,就是远程调用,大意是可以想调用本服务的方法一样去调用远程的服务内容,那么他是如何实现的呢?
首先A服务需要调用到B服务一般可以通过过对方的域名采用http的方式调用对方的接口,但这样明显不是我们想要的,这里首先需要一个注册中心,将可以调用的服务(包含方法)集中保存在一个地方,供需要的服务来使用,这个地方就叫做注册中心,它主要具有服务治理的功能,为消费者与提供者协调资源。
那么要实现这个远程调用,服务端与客户端各需要做什么呢?
服务端:服务端需要将对外提供的接口注册到注册中心,这样来使用的服务才能访问到,当一个远程请求访问来时会注明将要调用的接口的类名,方法名,参数类型,参数,服务端需要反射出服务,并进行执行,将执行结果返回给客户端。
客户端:客户端里需要有服务端的接口类,客户端通过动态代理,将要访问的接口信息封装为一个特殊的请求,包含了接口名,方法名,参数类型,参数,然后传输给服务端,并等待服务端的返回。
期间采用tcp连接,将对象序列化传输。
图解:
要实现的功能
上面的例子只是一次rpc的调用过程,那么真正需要我们实现的东西有哪些呢?
主要分为服务端、客户端和注册中心,服务端主要实现服务的注册、获取和方法的调用,客户端主要负责调用方法的封装(全限定类名+方法名+方法参数类型+方法参数)。
- common
– 传输协议
– 通信工具 - 服务端
– 保存服务到本地
– 获取本地的服务
– 在注册中心注册信息
– 调用本地服务 - 客户端
– 封装请求 - 注册中心
– nacos
大概是以上这些,下一篇文章开始详细展开。