Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tangsiyang2001/compact-rpc
可插拔式的微内核RPC框架,旨在支持高可拓展性和轻量化的RPC功能。
https://github.com/tangsiyang2001/compact-rpc
java nacos netty netty-rpc protocol rpc rpc-framework spi
Last synced: about 10 hours ago
JSON representation
可插拔式的微内核RPC框架,旨在支持高可拓展性和轻量化的RPC功能。
- Host: GitHub
- URL: https://github.com/tangsiyang2001/compact-rpc
- Owner: TangSiyang2001
- License: apache-2.0
- Created: 2022-02-24T13:51:11.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2022-09-03T08:22:50.000Z (over 2 years ago)
- Last Synced: 2024-12-06T16:24:07.869Z (about 2 months ago)
- Topics: java, nacos, netty, netty-rpc, protocol, rpc, rpc-framework, spi
- Language: Java
- Homepage:
- Size: 201 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# compact-rpc
#### 项目简介
- 适合框架开发学习和小型项目使用的轻量级rpc框架。
- 主要功能模式类似于知名rpc框架dubbo。
- 该项目麻雀虽小,五脏俱全,孵化于作者学习中间件开发的过程中。跟随本项目的实现思路能够使读者快速掌握一个rpc框架的基本原理和设计思想。
- 为了更加方便地理解本项目,您需要对[Netty](https://netty.io/)(通信框架)和[Nacos](https://nacos.io/)(注册中心)稍作了解。#### 项目模块
- **compact-rpc-base**:该项目的基础模块,实现了项目通用的接口、注解、实体和工具。
- **compact-rpc-impl**:该项目的主要模块,实现了该rpc框架的通信协议、序列化机制,服务注册与发现,服务端、客户端通信等主体功能。
- **compact-rpc-spring**:该项目的拓展模块,实现与原生spring框架的适配,能够伴随ApplicationContext自启动,同时根据注解情况自动完成服务注册,支持远程过程调用。
- **compact-rpc-example**:示例模块,其中带有compact-rpc-test前缀的均为测试模块。
- **compact-rpc-test-api**:服务端与客户端共同依赖的服务接口模块。
- **compact-rpc-test-client**:客户端样例。
- **compact-rpc-test-server**:服务端样例。#### 快速开始
[下载Nacos](https://github.com/alibaba/nacos/releases)
**在本地启动Nacos单机版**
首先先在命令行中切换到相应安装目录下
```bash
cd nacos/bin
```运行
###### Windows
```bash
startup.cmd -m standalone
```###### Linux/Unix/Mac
```bash
sh startup.sh -m standalone
```如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
```bash
bash startup.sh -m standalone
```![image-20220422230615761](http://cdn.blog.yileng.top/image-20220423210318408.png)
观察到nacos启动成功
##### 克隆项目到本地
等待依赖导入成功后,运行服务端测试(com.tsy.rpc.test.server.App的main方法)
![image-20220422231304094](http://cdn.blog.yileng.top/image-20220422231304094.png)
![image-20220422232146205](http://cdn.blog.yileng.top/image-20220423210834811.png)
正常启动
![image-20220422231600599](http://cdn.blog.yileng.top/image-20220422231600599.png)
若服务端没有出现异常退出,运行客户端测试(com.tsy.rpc.test.client.App的main方法)
![image-20220422231711768](http://cdn.blog.yileng.top/image-20220422231711768.png)
![image-20220422232106090](http://cdn.blog.yileng.top/image-20220423210432954.png)
控制台打印出hello rpc!字样,测试成功。
![image-20220422231902456](http://cdn.blog.yileng.top/image-20220423211058800.png)
#### 主要实现内容
- spi机制
ExtensionLoader的实现
- 客户端 动态代理
- 服务端
- 注册中心
nacos sdk
- 通信消息实体
- 自定义协议
4B magic code(魔法数) 1B messageType(消息类型) 1B version(版本) 1B compress(压缩类型) 1B codec(序列化类型) 4B requestId(请求的Id) 4B full length(消息长度)
- 序列化/反序列化实现
- protostuff
- 负载均衡
- spring扩展
#### 设计与实现思路
待更新