项目是在 Linux 环境下基于 muduo 网络库 和 protobuf 通信协议实现的 RPC 分布式通信框架,同时使用了 zookeeper 中间件,实现分布式一致性协调服务(注册服务、发现功能)。可以通过本框架将本地方法调用重构成基于 TCP 网络通信的 RPC 远程方法调用。实现了在分布式环境中的远程调用,令方法在不同机器或不同服务器上运行,以达到分布式集群效果。
-
通过 muduo 网络库实现高并发的网络通信模块
-
通过 protobuf 实现RPC方法调用和参数的序列化与反序列化
-
通过 zookeeper 实现分布式一致性协调服务,由此提供服务注册和发现功能
-
实现了基于 TCP 传输的二进制协议、解决了粘包问题,并且能高效的数据传输服务器名、方法名及参数。
- 操作系统:
Ubuntu 18.04.2 - 编译器:
g++ 7.5.0 - 编译器:
vscode - 版本控制:
git - 项目构建:
cmake 3.10.2
直接运行脚本即可自动编译项目
./autobuild.sh由于项目中使用 zookeeper 实现分布式一致性协调服务,所以我们需要先在 Linux 下启动 zookeeper
# 需要切换到 zookeeper 安装目录下的 bin 目录(以下为我目录的示例)
ubuntu@ ~$ cd /package/zookeeper-3.4.10/bin
# 如何启动 zookeeper 服务
ubuntu@ ~/package/zookeeper-3.4.10/bin$ ./zkServer.sh start验证是否开启项目,如若开启成功,则可以在进程中找到 zookeeper
# 验证是否启动
# 方法一
ubuntu@ ~$ sudo netstat -tanp
# 显示内容中含如下内容即开启服务成功
tcp6 0 0 :::2181 :::* LISTEN 16596/java
# 方法二
ubuntu@ ~$ ps -aux | grep zookeeper在启动 zookeeper 客户端脚本,启动客户端是为了检测是否能为RPC框架插入 znode 节点信息
ubuntu% ./zkCli.sh可以看到启动后 zookeeper 已经初始化成功
# 启动服务节点
ubuntu@ ~/RPC/bin$ ./provider -i test.conf
# 出现如下内容成功
[time],883:2955(0x7fedf5e3ca00):ZOO_INFO@log_env@726: Client environment:zookeeper.version=zookeeper C client 3.4.10
......
[time],941:2955(0x7fedf33bc700):ZOO_INFO@check_events@1775: session establishment complete on server [127.0.0.1:2181], sessionId=0x18f94c85d2b0000, negotiated timeout=30000
zookeeper_init sucess!回到 zookeeper 查看确认已经注册成功
# 通过 ls 命令查看注册成功的 znode 节点
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper, FriendServiceRpc]
[zk: localhost:2181(CONNECTED) 2] ls /FriendServiceRpc
[GetFriendsList]
[zk: localhost:2181(CONNECTED) 3] ls /FriendServiceRpc/GetFriendsList
[]
启动后可以看到非常多zookeeper 相关日志信息,这里看到他打印了rpc GetFriendsList sucess!。并且已经获取到了信息,说明RPC方法调用成功。
ubuntu@ ~/RPC/bin$ ./consumer -i test.conf
===========================================
header_size:36
rpc_header_str:
FriendServiceRpcGetFriendsList
service_name:FriendServiceRpc
method_name:GetFriendsList
args_str:
===========================================
[time],292:3969(0x7f5818f52d00):ZOO_INFO@log_env@726: Client environment:zookeeper.version=zookeeper C client 3.4.10
......
[time],300:3969(0x7f5816cd0700):ZOO_INFO@check_events@1775: session establishment complete on server [127.0.0.1:2181], sessionId=0x18f94c85d2b0006, negotiated timeout=30000
zookeeper_init sucess!
[time],305:3969(0x7f5818f52d00):ZOO_INFO@zookeeper_close@2527: Closing zookeeper sessionId=0x18f94c85d2b0006 to [127.0.0.1:2181]
rpc GetFriendsList response success:
index1 name:he peng
index2 name:xie boss
index3 name:kun kun
