littlebot
Published on 2025-04-10 / 0 Visits
0

【源码】基于Netty+Kyro+Zookeeper的简单RPC框架

项目简介

本项目是一个基于Netty、Kyro和Zookeeper实现的简单RPC框架。RPC(远程过程调用)框架允许客户端像调用本地方法一样调用远程服务器上的方法。借助这个项目,你可以学习RPC的底层原理以及各种Java编码实践的运用。

项目的主要特性和功能

核心功能

  1. 服务注册与发现:以Zookeeper作为注册中心,服务提供者将服务注册到Zookeeper,服务消费者通过Zookeeper获取服务地址。
  2. 网络传输:基于Netty实现高性能网络传输,支持NIO(非阻塞I/O)。
  3. 序列化与反序列化:采用Kyro作为序列化协议,提供高效的序列化和反序列化功能。
  4. 动态代理:通过动态代理屏蔽远程方法调用的细节,使调用远程方法如同调用本地方法一样简便。
  5. 负载均衡:支持随机负载均衡和一致性哈希负载均衡,确保请求均匀分配到不同的服务提供者。
  6. 服务版本管理:支持服务的版本管理,便于进行不兼容升级。
  7. 集成Spring:通过注解实现服务的自动注册和引用。

可优化点

  1. 增加可配置性:支持序列化方式、注册中心的实现方式等配置,避免硬编码。
  2. 客户端与服务端通信协议优化:重新设计数据包结构,增加魔数、序列化器编号、消息体长度等字段。
  3. 编写测试:为重构代码提供信心,确保代码的稳定性和可靠性。
  4. 服务监控中心:类似Dubbo Admin,提供服务监控和管理功能。
  5. 设置gzip压缩:进一步优化网络传输效率。

安装使用步骤

导入项目

  1. Fork项目到自己的仓库。
  2. 使用IDEA打开项目,等待项目初始化完成。

初始化git hooks

  1. 执行以下命令: bash ➜ guide-rpc-framework git:(master) ✗ chmod +x ./init.sh ➜ guide-rpc-framework git:(master) ✗ ./init.sh
  2. 该脚本的主要作用是将git commit钩子拷贝到项目下的.git/hooks/目录,确保每次提交代码前运行Check Style,保证代码格式正确。

CheckStyle插件下载和配置

  1. 在IntelliJ IDEA中,进入Preferences->Plugins,搜索并下载CheckStyle插件。
  2. 配置CheckStyle插件,具体配置方式参考插件文档。

下载和运行Zookeeper

  1. 使用Docker下载并安装Zookeeper: shell docker pull zookeeper:3.5.8 docker run -d --name zookeeper -p 2181:2181 zookeeper:3.5.8

启动项目

  1. 启动服务提供端: java public class NettyServerMain { public static void main(String[] args) { new AnnotationConfigApplicationContext(NettyServerMain.class); NettyServer nettyServer = new NettyServer(); HelloService helloService2 = new HelloServiceImpl2(); RpcServiceProperties rpcServiceConfig = RpcServiceProperties.builder() .group("test2").version("version2").build(); nettyServer.registerService(helloService2, rpcServiceConfig); nettyServer.start(); } }

  2. 启动服务消费端: ```java @Component public class HelloController { @RpcReference(version = "version1", group = "test1") private HelloService helloService;

    public void test() throws InterruptedException { String hello = this.helloService.hello(new Hello("111", "222")); assert "Hello description is 222".equals(hello); Thread.sleep(12000); for (int i = 0; i < 10; i++) { System.out.println(helloService.hello(new Hello("111", "222"))); } } } ```

通过以上步骤,你可以成功启动并使用这个简单的RPC框架。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】