rpc_by_hand 是一个使用 netty、zookeeper 和 protobuf 实现的简易RPC框架。
主要是为了让自己熟悉RPC的基本原理和实现,代码中有详细的注释,适合学习和参考。
rpc_common:包含封装 RPC 请求与响应的实体类model,Netty 编解码器enc_dec以及序列化/反序列serializerrpc_server:Netty / RPC 服务端,包括处理并响应客户端的请求,服务注册与发现,服务端的启动和关闭等rpc_client:Netty / RPC 客户端,包括向服务端发送请求,接收服务端的响应rpc_registry:定义进行服务注册与发现的接口rpc_registry_zookeeper:基于zookeeper实现服务的注册与发现,负载均衡TestRpcClient:作为客户端,测试rpc服务,使用动态代理调用远程方法TestRpcServer:实现服务的接口,启动并发布rpc服务TestServiceApi:定义服务接口(RPC 接口)
- 使用 Spring 提供依赖注入与参数配置
- 集成
Spring通过注解实现RPC服务的发布和调用 - 使用
Netty高效地进行网络传输- 进一步基于开源的序列化框架
Protostuff让用户可以通过配置文件指定序列化方式,避免硬编码 - 自定义编解码器
- TCP 心跳机制,自定义应用层的
Netty心跳机制 - 使用
JDK/CGLIB动态代理机制调用远程方法
- 进一步基于开源的序列化框架
- 借助
Zookeeper容器实现服务注册和发现- 客户端调用远程服务的时候进行负载均衡,目前使用的策略为随机负载均衡,也就是随机选取一个服务地址
- 支持多种负载均衡策略