项目简介
本项目是基于Netty、Kyro和Zookeeper实现的简易RPC框架。RPC(远程过程调用)框架可让客户端像调用本地方法一样调用远程服务器上的方法。借助该框架,开发者能轻松实现分布式系统中的服务调用,还可学习RPC底层原理和Java编码实践。
项目的主要特性和功能
核心功能
- 服务注册与发现:以Zookeeper为注册中心,服务提供者将服务注册到Zookeeper,服务消费者通过Zookeeper获取服务地址。
- 网络传输:基于Netty实现高效网络传输,支持NIO(非阻塞IO)。
- 序列化与反序列化:支持Kyro、Hessian和Protostuff等多种序列化协议,保障数据网络传输的高效性与安全性。
- 动态代理:运用动态代理技术,客户端能像调用本地方法一样调用远程方法,屏蔽网络传输细节。
- 负载均衡:支持随机负载均衡和一致性哈希负载均衡等多种策略,确保服务调用的高效性与稳定性。
扩展功能
- 服务版本管理:支持服务的版本管理,便于服务的升级和回滚。
- 服务分组:支持服务的分组管理,利于服务的分类和隔离。
- 集成Spring:通过注解方式集成Spring,简化服务的注册和引用。
- 心跳机制:支持Netty心跳机制,保证客户端和服务器之间连接稳定。
安装使用步骤
1. 导入项目
将项目复制到本地,使用IDEA打开项目,等待项目初始化完成。
2. 初始化git hooks
为保证代码格式正确,项目使用Check Style工具。提交代码前会自动运行Check Style检查,可通过以下命令初始化git hooks:
bash
chmod +x ./init.sh
./init.sh
3. 配置CheckStyle插件
在IDEA中安装CheckStyle插件并配置:
1. 打开IDEA的Preferences
-> Plugins
,搜索并安装CheckStyle插件。
2. 配置CheckStyle插件,确保其能正确运行。
4. 下载并运行Zookeeper
使用Docker下载并运行Zookeeper:
bash
docker pull zookeeper:3.5.8
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.5.8
5. 启动服务
服务提供端
实现接口并发布服务: ```java @RpcService(group = "test1", version = "version1") public class HelloServiceImpl implements HelloService { @Override public String hello(Hello hello) { return "Hello description is " + hello.getDescription(); } }
public class NettyServerMain { public static void main(String[] args) { new AnnotationConfigApplicationContext(NettyServerMain.class); NettyServer nettyServer = new NettyServer(); nettyServer.start(); } } ```
服务消费端
通过注解引用服务并进行调用: ```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"));
System.out.println(hello);
}
} ```
6. 运行测试
在IDEA中运行服务提供端和服务消费端的main
方法,确保服务能正常启动和调用。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】