C++基于protobuf的发布订阅式消息队列测试报告

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌟🌟 追风赶月莫停留 🌟🌟
🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀
🌟🌟 平芜尽处是春山🌟🌟
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
🍑项目概述
🍍项目背景
在分布式系统架构中,跨主机之间的生产者-消费者模型是核心需求 。本项目通过将阻塞队列封装成独立的服务器程序,实现了一个仿 RabbitMQ 的消息队列(Message Queue, MQ)组件 。它解决了系统间的解耦合、异步并发处理、以及支持忙闲不均等关键后端开发问题。
🍍项目目标
- 模拟 RabbitMQ 核心机制:实现包含虚拟机、交换机、队列和绑定在内的 AMQP 模型 。
- 高性能通信:基于事件驱动模型,支撑高并发的客户端请求 。
- 可靠性保障:支持消息的持久化存储,确保服务器重启后数据不丢失 。
- 多模式分发:支持 Direct(直接)、Fanout(广播)、Topic(主题)三种主流交换机路由转发模式 。
🍍业务场景
- 生产者发布消息:客户端作为生产者,通过信道将消息发布至指定的交换机,并携带 routing_key 。
- 交换机智能路由:Broker 根据交换机类型和匹配规则,将消息分发至绑定的队列中 。
- 消费者订阅推送:消费者订阅特定队列,Broker 将消息轮询推送给在线订阅者,实现负载均衡 。
- 消息应答反馈:消费者处理完消息后进行手动或自动应答,Broker 据此安全删除消息 。
🍍技术特点
- 核心框架:使用 C++11 编写,集成 muduo 库(主从 Reactor 模型)处理底层高并发网络通信 。
- 序列化:采用 Protobuf 二进制序列化框架,提升传输效率与安全性 。
- 持久化:使用 SQLite3 存储元数据(交换机、队列等),使用自定义文件格式管理消息正文 。
- 并发设计:采用 one loop per thread 线程模型,内置异步线程池处理任务分发 。
🍑测试环境
- 操作系统:Linux (CentOS 7.6 / Ubuntu 22.04) 。
- 编译器:g++ (高版本,如 GCC 7.3+) 。
- 构建工具:Makefile & CMake 。依赖库:Protobuf 3.20.2、muduo、SQLite3 。
- 测试框架:GTest (Google Test) 单元测试框架 。
🍑项目结构

项目采用模块化设计,主要分为服务端与客户端两大部分 :
- mqcommon:公共模块,包含线程池、UUID 生成、日志打印及 Helper 工具类 。
- mqserver:服务端核心,包含持久化管理中心(Mapper)、虚拟机(VirtualHost)、交换路由模块及信道/连接管理 。
- mqclient:客户端模块,提供面向用户的信道(Channel)接口及异步消息处理线程 。
🍑测试用例

- 文件操作类的测试



文件读写测试成功
- 交换机数据管理类的测试



交换机增加和查询功能测试成功


交换机删除和查询功能测试成功
- 队列数据管理类的测试


队列增加和查询功能测试成功
- 绑定数据管理类的测试



绑定信息增加和查询测试成功


绑定信息删除测试成功
- 虚拟机管理测试




虚拟机相关测试成功
-
路由交换测试



路由匹配测试成功 -
广播交换测试







广播交换测试成功
- 直接交换测试
理论上只有queue1能收到消息







直接交换测试成功
- 主题交换测试
理论上只有queue2才与下面传入数据的主题相关,另外还附有主题不相关的数据







主题交换测试成功
🍑测试总结

本项目针对基于 protobuf 的发布订阅式消息队列进行了主要功能测试,涵盖了从底层文件、虚拟机逻辑隔离到多种复杂交换机路由模式(直接、广播、主题匹配)的核心功能验证。
关于本项目如果有不足或者遗漏,欢迎大家指正,谢谢!!!


AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)