当前位置: 首页 > news >正文

仿RabbitMQ实现消息队列(二)-安装

安装配置环境

    • lrzsz
    • protobuf
    • Gtest
    • 安装muduo库
  • Protobuf
    • 什么是protobuf
    • 使用流程介绍
    • 简单上手

lrzsz

这个是文件传输工具,是来实现服务器跟本地之间的文件传输

sudo apt install lrzsz

protobuf

配置安装路径 在ubuntu下是 /usr/include/google/protobuf
这里我是直接把protobuf包下载到本地,然后直接拖到vscode.

# 切换到 protobuf目录下 运行
./autogen.sh
# 配置安装路径 默认安装在 /usr/local 目录,lib、bin 都是分散的
./configure
# 开始编译15分钟左右
make
# 开始安装
sudo make install
# 确认是否安装成功
libprotoc 3.20.2	

Gtest

sudo apt install libgtest-dev

安装sqlite3
由于ubuntu问题,这里安装的是降级sqlite3 并不是最新版本的,

sudo apt install aptitude
sudo aptitude install sqlite3

安装muduo库

git clone https://github.com/chenshuo/muduo.git
wget
https://gitee.com/hansionz/mq/raw/master/resource/muduo-master.zip

运行脚本编译安装

./bulid.sh
./build.sh install

这个时候会在同级目录下生成一份build文件夹
验证是否编译安装成功

# 切换编译目录
cd ~/build/release-cpp11/bin# 运行 protobuf-demo 服务端
./protobuf_server 9091# 运行 protobuf-demo 客户端
./protobuf_client 0.0.0.0 9091

如果出现一下信息说明成功。“ chen shuo‘

20230717 07:51:14.237167Z 23144 INFO pid = 23144 - client.cc:93
20230717 07:51:14.237233Z 23144 INFO
TcpClient::TcpClient[QueryClient] - connector 0x2417530 -
TcpClient.cc:69
20230717 07:51:14.237334Z 23144 INFO
TcpClient::connect[QueryClient] - connecting to 0.0.0.0:9091 -
TcpClient.cc:10720230717 07:51:14.237511Z 23144 INFO 127.0.0.1:53368 ->
127.0.0.1:9091 is UP - client.cc:50
20230717 07:51:14.239109Z 23144 INFO onAnswer:
muduo.Answerid: 1
questioner: "Chen Shuo"
answerer: "blog.csdn.net/Solstice"
solution: "Jump!"
solution: "Win!"
- client.cc:75
20230717 07:51:14.239170Z 23144 INFO 127.0.0.1:53368 ->
127.0.0.1:9091 is DOWN - client.cc:50
20230717 07:51:14.239201Z 23144 INFO
TcpClient::~TcpClient[QueryClient] - connector 0x2417530 -
TcpClient.cc:75

Protobuf

什么是protobuf

它是数据结构序列化和反序列化框架。它基于应用层协议实现数据的序列化和反序列化的一个功能。他具有以下特点:

  • 语言无关,平台无关
  • 高效
  • 扩展性兼容性好

序列化就是把对象转换为可存储或传输的格式的过程,反序列化就是把序列化后的数据恢复为原始对象的过程。好比如 序列化 = 把商品精心包装成快递盒, 反序列化 = 收到快递后拆开包装,恢复成商品。

使用流程介绍

在这里插入图片描述

简单上手

syntax = "proto3";
package contacts;message PeopleInfo {string name = 1;int32 age = 2;}
  • syntax = "proto3";:指定使用 proto3 版本的语法。Proto3 相比于 Proto2 简化了很多特性,并且支持更多语言。
  • package chat;:定义了一个包声明 chat,这有助于防止不同项目之间的命名冲突。
    接下来是消息类型的定义:
    1、message PeopleInfo:定义了个名为PeopleInfo 的消息类型,表示一个人物具有以下信息:
    string name=1;//姓名
    int32 age=2;//年龄
    编译
protoc --cpp_out= . contact.proto

这些定义可以被编译成多种汇编语言,以便在不同的系统和服务之间传输结构画的数据。
接下来看看几个方法:


1、序列化和反序列化方法
_InternalSerialize()

uint8_t* ChatMessage::_InternalSerialize(uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const
  • 作用:将消息对象序列化为二进制格式
  • 调用链:被 SerializeToArray()/SerializeToString() 调用
  • 重要性:所有网络传输和持久化存储的基础
    2、内存管理方法
    SharedCtor()/ SharedDtor()
void ChatMessage::SharedCtor(::_pb::Arena* arena, bool is_message_owned)
void ChatMessage::SharedDtor()
  • 作用:构造/析构时的内存管理
  • 特点:处理字符串字段的内存分配和释放
    InternalSwap()
void ChatMessage::InternalSwap(ChatMessage* other)
  • 作用:高效交换两个对象的内容
  • 使用场景:被赋值运算符和移动语义操作调用
    3、工具方法
size_t ChatMessage::ByteSizeLong() const
  • 作用:计算消息序列化后的字节大小
  • 用途:预先分配缓冲区大小
bool ChatMessage::IsInitialized() const
  • 作用:检查所有 required 字段是否已设置(在 proto3 中主要用作占位符)

4、是几种常用函数方法

// 序列化
message.SerializeToString(&output_string);// 反序列化
message.ParseFromString(input_string);// 字段访问
message.set_sender("Alice");
const std::string& sender = message.sender();
http://www.dtcms.com/a/552927.html

相关文章:

  • 三网合一营销型全网站wordpress的功能简介
  • 鸿蒙分布式数据服务(DDS)原理与企业同步实战
  • 《pygame中Sprite类实现多帧动画》注-显示静态图片2-2
  • 2025年10月31日Github流行趋势
  • 深入浅出wpf学习总结
  • 建搜索引擎网站做欧洲电商看哪个网站
  • 【Linux网络】实现一个简单的聊天室
  • HTTPS接口国密安全设计-示例
  • 通过nginx+openssl自签名证书部署https应用并解决不安全问题
  • AI提示词:别再把提示词当 “聊天”—— 它是人机协作的 “接口定义”
  • Rust开发之使用panic!处理不可恢复错误
  • 买业务送网站浙江省住房和城乡建设厅网站查询
  • 网站托管服务 优帮云网站专题页面用什么做
  • Redisson 的分布式锁机制幽默笑话理解
  • Qt-HTTPWebSocket
  • MATLABcode|2个雷达二维目标跟踪滤波系统 - EKF实现,匀速运动模型,输入:雷达观测数据(距离、方位角),输出:目标状态估计(位置、速度)
  • TDengine 数据函数 CORR 用户手册
  • Java的驼峰转换实现方案
  • 从零开始的C++学习生活 19:C++复习课(5.4w字全解析)
  • 阿里云-云服务器的创建与使用
  • 安防监控系统:安防之眼,智守未来
  • 网站建设吸引人的话语广元北京网站建设
  • 网站上线前营销推广工作准备网站创建费用
  • Apache Tomcat RewriteValve目录遍历漏洞 | CVE-2025-55752 复现
  • k8s:service资源详解
  • 大型系统性能优化问题
  • 国际版多语言语聊语音厅交友源码开发:技术特性、中外差异与核心注意事项
  • 面对网络蠕虫的紧急处理方式和防护措施
  • 深入掌握 Maven Settings:从配置到实战
  • 厦门做网站seo的惠州哪家做网站比较好