RabbitMQ 核心概念
RabbitMQ 是一个开源的消息队列组件,主要实现两个客户端主机之间的消息传输功能(发布与订阅)。
在传统的网络通信中,两个客户端直接通过 Socket 进行点对点传输。这种方式存在明显缺陷:如果一端连接断开,另一端是等待还是丢弃消息?如果一直等待,新产生的消息又该如何处理?此外,数据产生和处理的时间往往不成正比,容易导致阻塞。
为了解决这些问题,我们引入了消息队列服务器作为中间转发层。发布端将消息投递到服务器,服务器再根据策略推送到订阅端进行处理。这种架构不仅提高了安全性,还实现了解耦。
AMQP(高级消息队列协议)是 RabbitMQ 遵循的核心标准,其关键概念包括交换机、队列、绑定和路由键(Routing Key)。
- 交换机:负责接收消息并根据规则转发到不同的队列。
- 队列:存储消息的容器,订阅者从队列获取消息。
- 绑定:建立交换机与队列之间的关联关系。
- 路由键:用于标识消息类型的字符串,决定消息进入哪个队列。
常见的交换机类型有三种:
- 广播交换(Fanout):收到消息后,转发给所有绑定的队列。
- 直接交换(Direct):对比消息中的
binding_key与绑定的routing_key,一致则投递。 - 主题交换(Topic):使用通配符规则匹配
binding_key与routing_key,成功则投递。
安装 RabbitMQ 服务端
在 Linux 环境下,可以通过包管理器快速安装:
sudo apt install rabbitmq-server
服务启动与状态检查:
# 启动服务
sudo systemctl start rabbitmq-server.service
# 查看状态
sudo systemctl status rabbitmq-server.service
默认用户 guest 权限受限,建议创建管理员用户以支持远程登录和管理:
# 添加用户 root,密码 123456
sudo rabbitmqctl add_user root 123456
# 设置标签为管理员
sudo rabbitmqctl set_user_tags root administrator
# 设置权限,允许访问所有虚拟主机和资源
sudo rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
开启 Web 管理插件,默认端口 15672:
sudo rabbitmq-plugins enable rabbitmq_management
安装 C++ 客户端库
本文选用 AMQP-CPP 库进行开发。该库完全异步,无阻塞调用,适合高性能场景,但需要 C++17 支持。


