这是一个基于 Netty + Zookeeper + Protostuff 的简易 RPC 框架。 造轮子主要是为了学习,因为我觉得"会用"、"会读源码"、"会写出来"是完全不一样的水平。
Github: https://github.com/chenchuxin/ccx-rpc
Gitee: https://gitee.com/imccx/ccx-rpc
更多详细教程请看:https://www.cnblogs.com/chenchuxin/category/2010813.html
以下是重要的包的简介:
|- ccx-rpc-common:基础的代码
|- extendsion:扩展,主要实现了一套自己的 SPI,参考 dubbo,做了简化
|- url: 同样也是参考 dubbo 的 URL,一般是构建参数用的
|- ccx-rpc-core: rpc 核心逻辑
|- annotation:里面包含了一些自定义的注解,例如 @RpcService(服务提供)、@RpcReference(服务引用)
|- compress: 压缩,网络传输需要压缩数据
|- config: 定义了一套配置的接口,例如配置服务绑定的端口,zk 的地址等
|- faulttolerant: 集群容错,例如快速失败、重试等
|- loadbalance: 负载均衡,多个服务应该如何选择。有随机策略、轮询策略等
|- proxy: 代理,用于客户端代理,客户端调用服务接口,实际上是一个网络请求的过程
|- registry: 注册中心,例如 zk 注册中心
|- remoting: 网络相关的东西,例如自定义协议、Netty 收发请求等
|- serialize: 序列化,网络传输,序列化是必不可少了
|- spring: 一些 spring 相关的东西,例如扫描器、bean 的处理
|- ccx-rpc-demo: 框架的使用例子
|- ccx-rpc-demo-client: 客户端,服务引用方
|- ccx-rpc-demo-service: 服务提供方
- 自定义 SPI 扩展
- 动态代理
- JDK Proxy
- Javassist 生成代码,直接调用
- 注册中心
- Zookeeper
- Eureka
- Nacos
- Consul
- ...
- 序列化
- Protostuff
- Kryo
- ...
- 压缩
- gzip
- ...
- 远程通信
- 自定义通信协议
- 使用 Netty 框架
- 配置
- JVM 参数配置
- properties 文件配置
- Apollo 动态配置
- 负载均衡
- 随机策略
- 轮询策略
- 一致性哈希
- 多版本
- 集群容错
- 重试策略
- 快速失败策略
- 优雅停机
- 监控后台
- 线程模型
- 服务分组
- 过滤器
- 环境要求:JDK8 以上、Lombok 插件
- 需要安装
Zookeeper
并运行 - 修改配置文件
ccx-rpc.properties
中的 zk 地址、监听端口,启动服务com.ccx.rpc.demo.service.ServiceBootstrap
- 修改配置文件
ccx-rpc.properties
中的 zk 地址,启动客户端com.ccx.rpc.demo.client.ClientBootstrap
- 访问客户端地址
http://localhost:8864/user/1
就可以啦.http://localhost:8864/user/v2/1
可以访问另一个实现,这是多版本功能。
- Fork 本仓库
- 新建分支
- 提交代码
- 新建 Pull Request