自己实现一个 Mini RPC 框架

自己实现一个 Mini 框架系列之三 —— RPC

查看本系列其他文章

自己实现一个 IoC 框架
自己实现一个 Mini MVC 框架

RPC, 远程过程调用。可以简单地理解为在一台机器上调用另一个地方的代码实现。Java 中比较著名的 RPC 框架有 Dubbo, 公司后端也主要是 Dubbo 支撑起来的。那么自己实现一个 RPC 框架可以吗?

我们希望这样使用(示例代码)

首先是 API 模块,定义 model, 接口。
然后是 provider 模块, 实现接口,然后运行后暴露服务,允许客户端连接过来调用接口的具体实现。
最后是 consumer 模块,引入 api 接口,直接使用接口的方法就可以调用 provider 的实现。

api

Provider

Consumer

consumer:

consumer config:

大概的流程

provider 端 IoC 容器启动后,扫描有 @Rpc 注解的类, 然后通过注解的 config 属性拿到 ProviderConfig, 其中定义了 Exporter 行为由谁实现, 获取 Exporter 实例,把服务实例暴露出来即可。
consumer 端在 IoC 启动之前,扫描带有 @Rpc 注解的字段,获取 ConsumerConfig, 拿到 ProxyFactory 对该远程接口创建代理,改代理将在容器启动时注入到这个字段,并将代理这个接口的所有方法。

@See Alse: JDK 动态代理的实现

调用时,消费者调用的是创建的代理,代理的实现是把调用信息封装在 Invocation 中通过网络传到服务端。服务端的 Exporter 收到网络请求,解析 Invocation 内容,调用实际 service 把结 set 到 Invocation 中,同样通过网络传回。

基本思路就是这样,但是这个是去年写的,当时比较忙,实现得不太优雅,代码就不贴出来了。有兴趣的同学可以在 github 上看一看:
https://github.com/YouthLin/mini-framework/tree/v1.1.0/mini-rpc
示例代码:https://github.com/YouthLin/examples


“自己实现一个 Mini RPC 框架”的2个回复

Loading...

发表评论

电子邮件地址不会被公开。 必填项已用*标注