netty-rpc
所属分类:云计算
开发工具:Java
文件大小:0KB
下载次数:0
上传日期:2022-08-21 15:10:04
上 传 者:
sh-1993
说明: 一个轻量级的 RPC 框架。基于 Netty 实现的网络传输,基于 Zookeeper 实现的服务注册中心,采用自定义的应用层通信协议进行消息的传输,采用多种可选的序列化机制。该框架还包括心跳机制、负载均衡等功能。,
(A lightweight RPC framework. Netty based network transmission and Zookeeper based service registry adopt customized application layer communication protocol for message transmission and a variety of optional serialization mechanisms. The framework also includes heartbeat mechanism, load balancing and other functions.,)
文件列表:
a.txt (0, 2023-09-26)
images/ (0, 2023-09-26)
images/20220720120625.png (197590, 2023-09-26)
netty-rpc-client/ (0, 2023-09-26)
netty-rpc-client/pom.xml (761, 2023-09-26)
netty-rpc-client/src/ (0, 2023-09-26)
netty-rpc-client/src/main/ (0, 2023-09-26)
netty-rpc-client/src/main/java/ (0, 2023-09-26)
netty-rpc-client/src/main/java/com/ (0, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/ (0, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/ (0, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/ (0, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/RpcClientMain.java (728, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/discovery/ (0, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/discovery/ServiceDiscovery.java (279, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/discovery/ZkServiceDiscovery.java (3809, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/handler/ (0, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/handler/HeartBeatClientHandler.java (1653, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/handler/RpcResponseMessageHandler.java (1347, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/manager/ (0, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/manager/ClientProxy.java (2143, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/manager/RpcClientManager.java (5363, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/service/ (0, 2023-09-26)
netty-rpc-client/src/main/java/com/llp/rpc/client/service/HelloService.java (94, 2023-09-26)
netty-rpc-client/src/main/resources/ (0, 2023-09-26)
netty-rpc-client/src/main/resources/logback.xml (1630, 2023-09-26)
netty-rpc-common/ (0, 2023-09-26)
netty-rpc-common/pom.xml (539, 2023-09-26)
netty-rpc-common/src/ (0, 2023-09-26)
netty-rpc-common/src/main/ (0, 2023-09-26)
netty-rpc-common/src/main/java/ (0, 2023-09-26)
netty-rpc-common/src/main/java/com/ (0, 2023-09-26)
netty-rpc-common/src/main/java/com/llp/ (0, 2023-09-26)
netty-rpc-common/src/main/java/com/llp/rpc/ (0, 2023-09-26)
netty-rpc-common/src/main/java/com/llp/rpc/common/ (0, 2023-09-26)
netty-rpc-common/src/main/java/com/llp/rpc/common/annotation/ (0, 2023-09-26)
netty-rpc-common/src/main/java/com/llp/rpc/common/annotation/RpcServer.java (379, 2023-09-26)
netty-rpc-common/src/main/java/com/llp/rpc/common/annotation/RpcServerScan.java (459, 2023-09-26)
... ...
# netty-rpc
### 项目描述
一个轻量级的 RPC 框架。基于 Netty 实现的网络传输,基于 Zookeeper 实现的服务注册中心,采用自定义的应用层通
信协议进行消息的传输,采用多种可选的序列化机制。该框架还包括心跳机制、负载均衡等功能。
<<<<<<< HEAD
<<<<<<< HEAD
=======
>>>>>>> bf514a3 (Update README.md)
=======
>>>>>>> 193486d68f318ac45ea22c79a05b9508af472644
### 项目结构
``` lua
netty-rpc
├── netty-rpc-client -- 客户端实现
| ├── discovery -- 服务发现功能的封装
| ├── handler -- 客户端的handler。包括发送心跳包,处理响应消息。
| ├── manager -- 客户端管理器。rpc具体调用细节封装在这里。
| ├── service -- 远程调用方法的接口
| └── RpcClientMain -- 客户端启动类(用于测试)
|
├── netty-rpc-server -- 服务端实现
| ├── factory -- 服务工厂。存放所有标注了注解@RpcService的对象,即暴露服务的对象。
| ├── handler -- 服务端的handler。包括检测心跳包,处理请求消息。
| ├── manager -- 服务端管理器。服务端初始化细节(包括启动服务器、扫描暴露服务等)封装在这里。
| ├── registry -- 服务注册功能的封装
| └── RpcClientMain -- 服务端启动类
|
└── netty-rpc-common -- 通用模块
├── annotation -- 自定义注解。
├── config -- 配置相关,读取配置文件信息。
├── loadBalancer -- 负载均衡功能。
├── message -- rpc传输的消息体封装。包括心跳包消息、请求消息、响应消息。
├── protocol -- rpc传输的协议封装。包括编解码器、序列化器、粘包半包处理器。
├── utils -- 工具类的封装。
└── zookeeper -- zookeeper客户端基本操作的封装
```
### rpc基本框架
![](https://github.com/929767782/netty-rpc/blob/master/./images/20220720120625.png)
<<<<<<< HEAD
<<<<<<< HEAD
![](https://github.com/929767782/netty-rpc/blob/master/./images/20220720120625.png)
=======
>>>>>>> 80406bf (Update README.md)
=======
>>>>>>> 193486d68f318ac45ea22c79a05b9508af472644
### 已实现的功能
- [x] **使用 Netty(基于 NIO)替代 BIO 实现网络传输;**
- [x] **使用多种可选的序列化机制;**
- [x] **使用 zookeeper 作为注册中心,实现服务注册、发现和监听等功能**
- [x] Netty 重用 Channel 避免重复连接服务端
- [x] 使用 Promise 对象包装接收客户端返回结果
- [x] **增加 Netty 心跳机制** : 保证客户端和服务端的连接不被断掉,避免重连。
- [x] **客户端调用远程服务的时候进行负载均衡** :调用服务的时候,从很多服务地址中根据相应的负载均衡算法选取一个服务地址。
- [x] **采用动态代理的方式封装客户端调用服务的过程** :通过动态代理封装rpc连接、发送消息等细节,使得只需简单调用接口的方法即可完成远程服务调用。
- [x] **自定义注解标注需要暴露的服务,并将其存放到服务工厂中** 。
- [x] **增加可配置比如序列化方式,避免硬编码** :通过配置文件的方式进行配置
- [x] **客户端与服务端通信协议(数据包结构)重新设计** ,将 `RpcRequestMessage`和 `RpcResponeseMessage` 对象作为消息体,然后增加如下字段作为消息头:
- **魔数** : 4 个字节。这个魔数主要是为了筛选来到服务端的数据包,有了这个魔数之后,服务端首先取出前面四个字节进行比对,能够在第一时间识别出这个数据包并非是遵循自定义协议的,也就是无效数据包,为了安全考虑可以直接关闭连接以节省资源。
- **序列化器编号** :1个字节。标识序列化的方式,比如是使用 Java 自带的序列化,还是 json,kyro 等序列化方式。
- **消息体长度** : 4个字节。用于识别完整的数据包,防止粘包半包现象。
- **消息体类型** : 1个字节。用于识别是什么类型的消息。
- **请求序号** : 4个字节。为了双工通信,提供异步能力。
- **版本号** : 1个字节。可以支持协议的升级。
### 待实现的功能及思路
- [ ] **集成spring容器管理服务对象** :通过spring注解注册和消费服务。
- [ ] **处理一个服务接口对应多个实现类的情况** :在服务接口的注解的value中标注对应的实现类。在协议中多一个字段指定该实现类名。服务端通过指定实现类名调用服务。
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
- [ ] **支持多个可选的服务注册中心** :支持其他的服务注册与发现中心,如Nacos。在配置文件中进行配置,选择用哪个。
- [ ] **服务监控中心(类似dubbo admin)**
=======
>>>>>>> bf514a3 (Update README.md)
=======
- [ ] **支持多个可选的服务注册中心** :支持其他的服务注册与发现中心,如Nacos。在配置文件中进行配置,选择用哪个。
- [ ] **服务监控中心(类似dubbo admin)**
- [ ] **进一步封装框架,简化框架的使用**
>>>>>>> 0363e14 (Update README.md)
=======
- [ ] **支持多个可选的服务注册中心** :支持其他的服务注册与发现中心,如Nacos。在配置文件中进行配置,选择用哪个。
- [ ] **服务监控中心(类似dubbo admin)**
>>>>>>> 193486d68f318ac45ea22c79a05b9508af472644
### 运行项目
1. 在netty-rpc-common模块的配置文件中,将zookeeper地址改为自己服务器上的zookeeper地址。
2. 运行netty-rpc-server模块中的RpcServerMain,启动服务端。
3. 运行netty-rpc-client模块中的RpcClientMain,启动客户端。
近期下载者:
相关文件:
收藏者: