koalas-rpc

koalas-rpc(https://github.com/dromara/koalas-rpc) 是一个RPC 框架, 相比于 dubbo,它足够简单,无论是做二次开发还是想了解 RPC 原理,都有非常好的入手体验。 
 
项目启动调用过程如下:

使用注解标注接口。
使用 zookeeper 作为注册中心。客户端从zk拉取可用的 IP 
客户端利用 spring 生成 代理类。  最终由代理类完成消息的序列化和发送。
服务端反射调用。
可以配置直连,也可以利用注册中心,获取一批的IP,然后进行负载均衡。  

基本上 JavaRPC 框架都是这个套路:

先定义协议,一般是一个接口。
服务端实现这个接口。
客户端直接调用这个接口。 因为客户端引用的仅仅是一个接口,所以在调用之前,RPC框架要为这个接口生成了一个代理类, 在实际调用的时候,其实调用的是这个代理类,这个代理类代理的方法都是一个实现:就是将调用的信息(调用的类,方法,参数)进行封装。
然后获取所有的实现这个接口的服务端 IP(对应集群管理模块)。
从这些IP 中选择一台(对应负载管理模块)。
对调用信息序列化(序列化模块模块)。
最后发送(网络通信模块,http/tcp)。

 
对于服务端

扫描所有接口实现,将接口信息,连同服务器信息(IP、端口)一起注册到注册中心。
建立侦听。
获取到请求。
反序列化报文 。
解析出要调用的类,方法,参数,然后通过反射调用目标类和方法,并传递参数进去。 当然出于一定的目的也会对服务端的实现做一定的增强。 

 
所以一般的 RPC 实现,都是客户端使用代理实现,对应代理的实现方式,dubbo 使用的是Javassist,koalas-rpc使用的是 spring中 的功能。
 
个人注解版:
https://github.com/zhaoyb/koalas-rpc

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注