本项目基于 Java、Etcd 和 Vetx 实现了一个高性能 RPC 框架,使用自定义协议进行通信。编写了对应的 Spring-boot-starter ,开发者可以通过通过注解和配置快速使用框架;还支持通过 SPI 机制动态扩展序列化器、负载均衡器和重试容错策略。
- 加载配置:支持 .properties 和 .yml 格式的配置文件,通过双检索单例模式生成全局唯一的配置对象。
- 序列化器:支持多种序列化器,如 Jdk 序列化器,Json 序列化器,Hessian 序列化器,kyro 序列化器。
- 通信:消费端和服务端通过自定义协议进行通信。
- 使用工厂模式和 jdk 动态代理实现无感知的远程过程调用。
- 支持将服务信息缓存到本地,并利用 Etcd 的 watch 监听数据的变化,维护数据的一致性。
- 支持多种负载均衡策略,如轮询,随机,一致性哈希。
- 支持多种重试策略,如不重试,固定次数重试。
- 支持多种容错策略,如快速失败,静默处理。
- 本地服务注册器:将提供的服务和实现类存放在本地的 map 中,方便查找和调用。
- 使用 vert.x 的高性能网络服务器,基于 Vert.x 的 Handler 接口实现请求的异步处理,通过 recordParser 解决数据传输过程中的半包粘包问题,
默认使用 Etcd 作为注册中心的实现,提供服务注册,发现和心跳检测等功能。
- 支持 SPI 机制:框架所使用的序列化器、注册中心、负载均衡策略、容错策略都被定义为接口,用户可以根据需要编写自己的服务实现类,然后将信息注册到配置文件里,框架的 SPI Loader 会自动加载这些实现类。
- 使用自定义协议:相比 http 协议,自定义协议的格式更轻,更能满足定制化的需求,在本协议中,消息头只占 17 个字节。
- 使用 vert.x 的高性能网络服务器,异步处理请求,采用多路复用技术提高效率。
- 编写了对应的 Spring-boot-starter ,开发者可以通过通过注解和配置快速使用框架。
