【C/C++】跟我一起学_RabbitMQ初尝试

文章目录

  • RabbitMQ初尝试
    • 1 RabbitMQ 简介
      • What
      • Features
    • 2 RabbitMQ 架构核心组件
      • 消息投递过程图
    • 3 交换机类型(Exchange Types)
    • 4 消息确认机制(保证可靠性)
    • 5 RabbitMQ 使用(C++ 入门)
      • 推荐 C++ 客户端:
      • 安装 RabbitMQ(Docker 快速启动):
      • Docker镜像安装
      • C++ 使用示例(SimpleAmqpClient)
        • 安装依赖(Ubuntu 示例):
        • 发送消息(Producer):
        • 接收消息(Consumer):
      • 镜像安装后操作指南
        • 下一步操作:运行你的 C++ 生产者和消费者程序
        • 步骤 1:进入 cpp\_client 容器
        • 步骤 2:运行生产者程序
        • 步骤 3:运行消费者程序
        • 步骤 4:访问 RabbitMQ 管理后台(可选)
        • 如果你想让生产者和消费者长期运行并反复发送接收
    • 6 推荐学习资料
      • 官方文档 & 教程:
      • 面试知识点总结:
    • 7 入门总结 + 下一步建议

RabbitMQ初尝试

1 RabbitMQ 简介

What

RabbitMQ 是一个开源的消息队列中间件,基于 AMQP(Advanced Message Queuing Protocol 高级消息队列协议)实现,用于实现应用之间解耦、异步通信、削峰填谷等需求。

Features

  • 支持可靠消息投递(确认、持久化)
  • 灵活的路由机制(通过 Exchange)
  • 多种消息传输模式(点对点 / 发布订阅)
  • 支持集群、高可用、镜像队列
  • 支持插件机制,支持 MQTT、STOMP、WebSocket 等协议

2 RabbitMQ 架构核心组件

RabbitMQ 的通信模型基于 AMQP 协议,理解以下 5 个核心概念是关键:

组件 作用
Producer 生产者,发送消息
Queue 消息队列,存储消息
Exchange 交换机,负责路由消息到队列
Binding 绑定,定义队列和交换机的路由规则
Consumer 消费者,接收并处理消息

消息投递过程图

RoutingKey: order.created
RoutingKey: payment.completed
Producer
Direct Exchange
QueueA
QueueB
Worker Consumer
Worker Consumer
Push Notification Consumer

3 交换机类型(Exchange Types)

类型 描述 示例用途
Direct 精确匹配 routing key,1对1 消息 点对点通知
Fanout 广播消息到所有绑定队列,忽略 routing key 日志广播、告警系统
Topic 模糊匹配(支持通配符 */#),适合复杂路由规则 多级路由,如日志分类
Headers 根据 header 属性匹配,而非 routing key 不常用(规则更复杂)

4 消息确认机制(保证可靠性)

机制 描述
Publisher Confirm 确保消息送达 Exchange(生产者确认)
Manual ACK 消费者手动确认消费成功
持久化 消息/队列设置 durable 防止重启丢失

5 RabbitMQ 使用(C++ 入门)

推荐 C++ 客户端:

  1. rabbitmq-c:官方 C 客户端(支持 AMQP)
  2. SimpleAmqpClient:基于 rabbitmq-c 的 C++ 封装,接口更友好

安装 RabbitMQ(Docker 快速启动):

docker run -d --hostname rabbit --name rabbitmq \
  -p 5672:5672 -p 15672:15672 \
  rabbitmq:3-management
  • 管理界面:http://localhost:15672
  • 默认账号密码:guest / guest

Docker镜像安装

参考上传资源

C++ 使用示例(SimpleAmqpClient)

安装依赖(Ubuntu 示例):
sudo apt install librabbitmq-dev
git clone https://github.com/alanxz/SimpleAmqpClient.git
cd SimpleAmqpClient && mkdir build && cd build
cmake ..
make && sudo make install
发送消息(Producer):
#include 
int main() {
    auto channel = AmqpClient::Channel::Create();
    std::string queue = "test_queue";
    channel->DeclareQueue(queue, false, true, false, false);
    auto message = AmqpClient::BasicMessage::Create("Hello RabbitMQ!");
    channel->BasicPublish("", queue, message);
}
接收消息(Consumer):
#include 
int main() {
    auto channel = AmqpClient::Channel::Create();
    std::string queue = "test_queue";
    channel->DeclareQueue(queue, false, true, false, false);
    std::string consumer_tag = channel->BasicConsume(queue, "", true, false, false);
    auto envelope = channel->BasicConsumeMessage(consumer_tag);
    std::cout << "Received: " << envelope->Message()->Body() << std::endl;
}

镜像安装后操作指南

下一步操作:运行你的 C++ 生产者和消费者程序

在你启动了 RabbitMQ 后,接下来进入 cpp_client 容器运行你的客户端程序。

步骤 1:进入 cpp_client 容器
docker exec -it cpp_client /bin/bash

步骤 2:运行生产者程序
cd build
./producer

你应该会看到输出:

Message sent.

步骤 3:运行消费者程序

你可以打开另一个终端,重新进入容器,然后运行:

cd build
./consumer

输出示例:

Received: Hello from producer

步骤 4:访问 RabbitMQ 管理后台(可选)

浏览器访问:

http://localhost:15672

用户名/密码:

guest / guest

你可以在 “Queues” 页面看到你的 test_queue 队列,以及消息进出情况。


如果你想让生产者和消费者长期运行并反复发送接收

可以改造 producer.cppconsumer.cpp 添加循环逻辑。例如:

// producer.cpp
while (true) {
    mq.send("Hello from looped producer");
    sleep(1);
}


6 推荐学习资料

官方文档 & 教程:

  • RabbitMQ 中文文档
  • rabbitmq-c GitHub
  • SimpleAmqpClient GitHub

面试知识点总结:

  • 如何保障消息不丢不重不乱
  • RabbitMQ 与 Kafka 区别
  • 延迟消息如何实现(TTL+死信队列)
  • 消费失败重试机制
  • 如何实现分布式事务

7 入门总结 + 下一步建议

你已掌握 下一步建议
基础原理 + 架构 学习延迟队列、死信队列、事务消息
简单 C++ Producer/Consumer 集成线程池+MQ异步处理
Exchange 类型与绑定 实战发布订阅、日志系统、RPC 等

你可能感兴趣的:(C/C++,中间件,c语言,c++,rabbitmq)