# 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