# Simple-gu-RPC
**Repository Path**: gu-xiaoxie/simple-gu-rpc
## Basic Information
- **Project Name**: Simple-gu-RPC
- **Description**: 一个简单的RPC项目,底层使用netty进行网络通信,注册中心采用netty,将支持无缝融入springboot项目中
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: develop
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 0
- **Created**: 2022-08-24
- **Last Updated**: 2023-03-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Simple-gu-RPC
#### 介绍
一个简单的RPC项目,底层使用netty进行网络通信,注册中心采用Nacos,支持多种序列化算法,具有负载均衡、心跳检测、服务缓存、高性能客户端与高性能服务端,让大家熟悉基于netty如何开发自定义协议的客户端与服务端
#### 简单的说明
RPC的原理并不复杂,即netty作为客户端与服务端的,支持可以轻松解决半包粘包的问题,并且本项目使用自定义的协议,一个消息由消息头和消息体组成
在netty-server-client-demo中实现了一个自定义协议的 可实现 的NIO服务,具有握手、心跳检测、重试链接、连接复用的功能,该服务是参照《netty权威指南第二版》中
的第12章实现的。由于是基于netty实现的,框架本身性能就很强
单线程单连接的情况下:可以到达6000QPS,平均请求处理耗时大致在0.1ms~0.2ms
单线程多链接的情况下:三个线程也能在1S左右完成15000次请求
多进程多线程的情况下,服务端甚至可以到达每秒20000次的请求处理
#### 书籍推荐
http://119.29.86.131:9000/share/0fj4H5kTtFX
netty权威指南这本书可让大家方便理解,如何快速使用netty
#### 项目模块说明
gu-rpc-common:定义了框架中的一些基本类型变量
gu-rpc-core:实现了一个完成的RPC框架,具有客户端与服务端的具体实现,可以依赖次模块直接使用RPC
springboot-start-guRpc:完成guRpc对SpringBoot的适配
netty-server-client-demo:《netty权威指南第二版》第12章的代码实现,在原书中,该章节的代码是有错误的,此为我重写的,读者可以参照参考
#### 普通项目中使用教程
1.先使用git clone 把代码拉到本地
2.打开项目,对项目的gu-rpc-core进行mvn install 操作,将核心包导入到本地Maven仓库
3.在个人项目中,pom中添加依赖
gu-rpc-core
com.guguguweb
1.0.1-SNAPSHOT
4.启动一个nacos服务,默认连接本地8848的nacos服务
5.具体的使用可以参照,core模块的中的Test目录下代码
客户端代码:
GuRpcClient client = new NettyClient();
GuRpcClientProxy guRpcClientProxy = new GuRpcClientProxy(client);
HelloService helloService = guRpcClientProxy.getProxy(HelloService.class);
helloServer.sendHello("testHello");
服务端代码:
在具体的实现类添加@GuRPCServerService注解,并且被注解的实现类必须在启动类包的层级下
NettyRpcServer nettyRpcServer = new NettyRpcServer();
nettyRpcServer.start();
#### SpringBoot项目中的使用教程
1.先使用git clone 把代码拉到本地
2.打开项目,对项目的springboot-starter-guRpc进行mvn install 操作,将start包导入到本地Maven仓库
3.在个人SpringBoot项目中,pom中添加依赖
com.guguguweb
springboot-starter-guRpc
1.0.1-SNAPSHOT
4.启动一个nacos服务,默认连接本地8848的nacos服务
5.具体的使用可以参照,RpcServerBootTest模块和RpcClientTest中的代码
注意:对于SpringBoot服务端来说,需在启动类上添加@GuRpcServerStart注解
6.在配置文件中,添加如下配置
##服务端的端口
rpc.server.port = 1234
##客务端的端口
rpc.client.port = 1235
rpc.server.NacosPort = 8848
rpc.server.NacosHost = localhost
##序列化器的编号
rpc.server.serializerCode = 3
#### 额外说明
目前,项目支持4种序列化方式,默认采用Protostuff的序列化方式,该种序列化方式速度最高,且较不容易出现序列化类型匹配错误
0:KryoSerializer
1:JsonSerializer
2:HessianSerializer
3:ProtostuffSerializer
目前项目仍有优化的空间,将在后续不断优化升级
联系邮箱:guguguweb@163.com