持续造轮子, 不盲目造轮子 https://github.com/Snailclimb/guide-rpc-framework 源码

RPC框架各个模块介绍.png
阅读顺序 :
framework-sample —-> framework-common 底层实现
—-> service-api 远程调用需要处理公共接口
—-> example-server + example-client 使用方法

common
其中是一些工具类, 实现线程池,字符串处理, 单例工厂管理工具等

主要的注解 package github.javaguide.annotation; 包路径下定义了主要的服务注解
RpcService 服务提供方
RpcReference 服务调用客户端对象
SPI 公共注解

zk注册的结构
path ….
多层结构, 一个服务有多个地质可以调用
serviceName
| | | ….
host/ip : port host/ip:port host:port …..

整体的结构理解

rpc 实现主要的结构
序列化 —> protobuffer 等序列化
远程调用 —> 协议, 使用socket 或者netty io框架实现网络传输, 可以增加数据压缩和数据加密 保证通信过程
注册中心 —-> 使用zookeeper作为服务注册中心的服务查询中心
负载均衡 —-> 使用一致性hash算法完成服务均衡
框架辅助工具 —-> 服务提供和服务调用的框架实现, 注解 + bean处理; 动态代理解决普通对象调用远程服务的问题, 实现无侵入, 在bean的扫描中实现代理

最基本的使用

client 调用端 使用applicationcontext格努bean名称获取
定义传输层+配置对象,使用代理调用远程方法
服务提供端:
从bean容器中获取nettyserver, 接口实现注册到zk中, 并start启动服务
初始化socketserver 注册接口实现类到zk上

一致性hash算法的实现