请添加图片描述

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌟🌟 追风赶月莫停留 🌟🌟
🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀
🌟🌟 平芜尽处是春山🌟🌟
🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟
🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅

🍑项目概述

🍍项目背景

在分布式系统架构中,跨主机之间的生产者-消费者模型是核心需求 。本项目通过将阻塞队列封装成独立的服务器程序,实现了一个仿 RabbitMQ 的消息队列(Message Queue, MQ)组件 。它解决了系统间的解耦合、异步并发处理、以及支持忙闲不均等关键后端开发问题。

🍍项目目标

  1. 模拟 RabbitMQ 核心机制:实现包含虚拟机、交换机、队列和绑定在内的 AMQP 模型 。
  2. 高性能通信:基于事件驱动模型,支撑高并发的客户端请求 。
  3. 可靠性保障:支持消息的持久化存储,确保服务器重启后数据不丢失 。
  4. 多模式分发:支持 Direct(直接)、Fanout(广播)、Topic(主题)三种主流交换机路由转发模式 。

🍍业务场景

  1. 生产者发布消息:客户端作为生产者,通过信道将消息发布至指定的交换机,并携带 routing_key 。
  2. 交换机智能路由:Broker 根据交换机类型和匹配规则,将消息分发至绑定的队列中 。
  3. 消费者订阅推送:消费者订阅特定队列,Broker 将消息轮询推送给在线订阅者,实现负载均衡 。
  4. 消息应答反馈:消费者处理完消息后进行手动或自动应答,Broker 据此安全删除消息 。

🍍技术特点

  1. 核心框架:使用 C++11 编写,集成 muduo 库(主从 Reactor 模型)处理底层高并发网络通信 。
  2. 序列化:采用 Protobuf 二进制序列化框架,提升传输效率与安全性 。
  3. 持久化:使用 SQLite3 存储元数据(交换机、队列等),使用自定义文件格式管理消息正文 。
  4. 并发设计:采用 one loop per thread 线程模型,内置异步线程池处理任务分发 。

🍑测试环境

  1. 操作系统:Linux (CentOS 7.6 / Ubuntu 22.04) 。
  2. 编译器:g++ (高版本,如 GCC 7.3+) 。
  3. 构建工具:Makefile & CMake 。依赖库:Protobuf 3.20.2、muduo、SQLite3 。
  4. 测试框架:GTest (Google Test) 单元测试框架 。

🍑项目结构

在这里插入图片描述

项目采用模块化设计,主要分为服务端与客户端两大部分 :

  1. mqcommon:公共模块,包含线程池、UUID 生成、日志打印及 Helper 工具类 。
  2. mqserver:服务端核心,包含持久化管理中心(Mapper)、虚拟机(VirtualHost)、交换路由模块及信道/连接管理 。
  3. mqclient:客户端模块,提供面向用户的信道(Channel)接口及异步消息处理线程 。

🍑测试用例

在这里插入图片描述

  1. 文件操作类的测试

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
文件读写测试成功

  1. 交换机数据管理类的测试

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
交换机增加和查询功能测试成功

在这里插入图片描述

在这里插入图片描述
交换机删除和查询功能测试成功

  1. 队列数据管理类的测试

在这里插入图片描述

在这里插入图片描述
队列增加和查询功能测试成功

  1. 绑定数据管理类的测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

绑定信息删除测试成功

  1. 虚拟机管理测试

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
虚拟机相关测试成功

  1. 路由交换测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    路由匹配测试成功

  2. 广播交换测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

广播交换测试成功

  1. 直接交换测试

理论上只有queue1能收到消息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

直接交换测试成功

  1. 主题交换测试

理论上只有queue2才与下面传入数据的主题相关,另外还附有主题不相关的数据
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
主题交换测试成功

🍑测试总结

在这里插入图片描述

本项目针对基于 protobuf 的发布订阅式消息队列进行了主要功能测试,涵盖了从底层文件、虚拟机逻辑隔离到多种复杂交换机路由模式(直接、广播、主题匹配)的核心功能验证。

关于本项目如果有不足或者遗漏,欢迎大家指正,谢谢!!!

请添加图片描述

请添加图片描述

Logo

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

更多推荐