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

Ubuntu 系统 RabbitMQ 安装指南与使用(含 C++ 客户端与 SSL 错误解决)

文章目录

  • Ubuntu 系统 RabbitMQ 安装指南与使用(含 C++ 客户端与 SSL 错误解决)
    • 一、RabbitMQ 服务端安装与配置
      • 1.1 环境说明
      • 1.2 安装 RabbitMQ 服务端
      • 1.3 RabbitMQ 基础操作(服务管理)
      • 1.4 用户配置(解决默认用户权限问题)
      • 1.5 启用 Web 管理界面
    • 二、RabbitMQ 客户端库安装(C/C++)
      • 2.1 安装依赖库
      • 2.2 安装 C 客户端库(rabbitmq-c)
      • 2.3 安装 C++ 客户端库(AMQP-CPP)
    • 三、常见错误:SSL 版本冲突解决
      • 错误原因
      • 解决方案:修复 OpenSSL 安装
    • 四、验证安装(可选)
      • 编译与运行
    • 总结
  • RabbitMQ 命令行工具
      • 一、基础操作
        • 1. 启动 / 停止 RabbitMQ 服务
        • 2. 检查节点状态
      • 二、用户管理
        • 1. 列出所有用户
        • 2. 创建用户
        • 3. 删除用户
        • 4. 修改用户密码
        • 5. 设置用户角色
      • 三、虚拟主机管理
        • 1. 列出所有虚拟主机
        • 2. 创建虚拟主机
        • 3. 删除虚拟主机
        • 4. 设置用户对虚拟主机的权限
        • 5. 查看用户在虚拟主机的权限
      • 四、交换机与队列管理
        • 1. 列出交换机
        • 2. 列出队列
        • 3. 删除队列
        • 4. 清除队列消息
      • 五、连接与通道管理
        • 1. 列出连接
        • 2. 关闭连接
        • 3. 列出通道
      • 六、集群管理(高级)
        • 1. 查看集群状态
        • 2. 加入集群
        • 3. 从集群移除节点
      • 七、其他常用命令
      • 帮助与文档

Ubuntu 系统 RabbitMQ 安装指南与使用(含 C++ 客户端与 SSL 错误解决)

在消息队列领域,RabbitMQ 以其高可靠性、灵活的路由策略和跨语言支持,成为分布式系统中解耦服务的常用工具。本文将详细介绍 Ubuntu 系统下 RabbitMQ 的安装、基础配置、Web 管理界面启用,以及 C++ 客户端库(AMQP-CPP)的部署,并针对性解决安装中常见的 SSL 版本冲突问题。

一、RabbitMQ 服务端安装与配置

1.1 环境说明

  • 系统版本:Ubuntu 20.04 / 22.04(LTS 版本兼容性最佳)
  • 依赖:系统需联网,确保 apt 源更新正常

1.2 安装 RabbitMQ 服务端

RabbitMQ 依赖 Erlang 运行环境,但 Ubuntu 官方源中 rabbitmq-server 包已包含所需依赖,无需手动安装 Erlang,直接执行以下命令即可:

# 更新 apt 源(可选,确保安装最新版本)
sudo apt update# 安装 RabbitMQ 服务端
sudo apt install rabbitmq-server -y

安装完成后,系统会自动启动 RabbitMQ 服务,可通过以下命令验证状态:

# 查看 RabbitMQ 服务状态
sudo systemctl status rabbitmq-server.service

若输出中包含 active (running),则表示服务启动成功。

1.3 RabbitMQ 基础操作(服务管理)

操作需求命令
启动服务sudo systemctl start rabbitmq-server.service
停止服务sudo systemctl stop rabbitmq-server.service
重启服务sudo systemctl restart rabbitmq-server.service
设置开机自启(推荐)sudo systemctl enable rabbitmq-server.service
取消开机自启sudo systemctl disable rabbitmq-server.service

1.4 用户配置(解决默认用户权限问题)

RabbitMQ 安装后默认创建 guest 用户,但该用户仅允许本地访问(localhost),且权限有限。若需远程连接或完整操作权限,需创建自定义管理员用户:

  1. 添加用户格式:sudo rabbitmqctl add_user <用户名> <密码>,示例:

    sudo rabbitmqctl add_user root 123456
    
  2. 设置用户角色为管理员RabbitMQ 角色分为 administrator(全权限)、monitoring(监控权限)、policymaker(策略配置权限)等,管理员需设置为 administrator

    sudo rabbitmqctl set_user_tags root administrator
    
  3. 设置用户权限赋予用户对所有虚拟主机(/ 为默认虚拟主机)的读写权限,格式:sudo rabbitmqctl set_permissions -p <虚拟主机> <用户名> <配置权限> <写权限> <读权限>,示例:

    sudo rabbitmqctl set_permissions -p / root "." "." ".*"
    
    • 权限说明:"." 表示无配置权限,".*" 表示允许读写所有队列 / 交换机。

1.5 启用 Web 管理界面

RabbitMQ 提供可视化 Web 界面,方便管理队列、交换机、用户等,需手动启用插件:

# 启用 Web 管理插件
sudo rabbitmq-plugins enable rabbitmq_management

启用后,通过浏览器访问 http://<服务器IP>:15672,输入步骤 1.4 创建的用户名(如 root)和密码(如 123456),即可进入管理界面。

注意:若远程访问失败,需检查服务器防火墙是否开放 15672 端口(Web 界面端口)和 5672 端口(AMQP 协议默认端口),可通过以下命令开放端口:

# 开放 15672(Web)和 5672(AMQP)端口
sudo ufw allow 15672/tcp
sudo ufw allow 5672/tcp
# 重启防火墙生效
sudo ufw reload

二、RabbitMQ 客户端库安装(C/C++)

若需通过 C/C++ 代码操作 RabbitMQ,需安装底层 C 库和上层 C++ 库。本文选择主流的 rabbitmq-c(C 库)和 AMQP-CPP(C++ 库)。

2.1 安装依赖库

AMQP-CPP 依赖 libev(事件驱动库)和 openssl(SSL 加密库),先安装这些依赖:

# 安装 libev 事件库
sudo apt install libev-dev -y# 安装 openssl 库(用于 SSL 连接,默认系统可能已安装,此处确保版本兼容)
sudo apt install openssl libssl-dev -y

2.2 安装 C 客户端库(rabbitmq-c)

rabbitmq-c 是 RabbitMQ 官方推荐的 C 语言客户端库,为 C++ 库提供底层支持:

# 克隆 rabbitmq-c 源码(也可从 GitHub 下载压缩包)
git clone https://github.com/alanxz/rabbitmq-c.git# 进入源码目录,创建编译目录
cd rabbitmq-c
mkdir build && cd build# 编译安装(使用 CMake)
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local  # 指定安装路径为 /usr/local
make -j4  # 4 线程编译,可根据 CPU 核心数调整
sudo make install

2.3 安装 C++ 客户端库(AMQP-CPP)

AMQP-CPP 是基于 rabbitmq-c 的 C++ 封装库,API 更简洁,适合 C++ 项目开发:

# 克隆 AMQP-CPP 源码
git clone https://github.com/CopernicaMarketingSoftware/AMQP-CPP.git# 进入源码目录
cd AMQP-CPP# 编译安装(AMQP-CPP 使用 Makefile,无需 CMake)
make -j4
sudo make install

安装完成后,库文件会默认安装到 /usr/local/lib,头文件安装到 /usr/local/include,后续 C++ 项目可通过 -lAMQP 链接该库。

三、常见错误:SSL 版本冲突解决

在安装 AMQP-CPP 时,可能出现以下 SSL 相关错误:

/usr/include/openssl/macros.h:147:4: error: #error "OPENSSL_API_COMPAT expresses an impossible API compatibility level"
/usr/include/openssl/bio.h:687:1: error: expected constructor, destructor, or type conversion before ‘DEPRECATEDIN_1_1_0’

错误原因

系统中 openssl 版本与 AMQP-CPP 预期的 API 兼容级别不匹配(如系统安装了 OpenSSL 3.0,而代码依赖 OpenSSL 1.1.x 的旧 API)。

解决方案:修复 OpenSSL 安装

通过强制卸载冲突的 SSL 组件,再重新安装兼容版本:

  1. 查看已安装的 SSL 相关包

    dpkg -l | grep ssl
    

    输出中可能包含 libssl-devopenssllibevent-openssl 等包。

  2. 强制卸载冲突包

    # 强制卸载冲突的 SSL 相关包(根据实际输出调整包名)
    sudo dpkg -P --force-all libevent-openssl-2.1-7 openssl libssl-dev
    
    • --force-all:强制卸载,忽略依赖关系(避免因依赖导致无法卸载)。
  3. 修复 apt 依赖并重新安装 SSL

    # 修复 apt 依赖关系
    sudo apt --fix-broken install -y# 重新安装兼容的 SSL 库
    sudo apt install openssl libssl-dev -y
    
  4. 重新编译 AMQP-CPP修复 SSL 后,回到 AMQP-CPP 源码目录,重新执行编译安装:

    cd AMQP-CPP  # 进入之前的源码目录
    make clean   # 清除之前的编译残留
    make -j4
    sudo make install
    

四、验证安装(可选)

安装完成后,可通过简单的 C++ 代码验证客户端库是否可用(示例功能:连接 RabbitMQ 并创建一个队列):

#include <iostream>
#include <AMQP.h>
#include <ev.h>// 事件循环(libev)
struct ev_loop* loop = ev_default_loop(0);// 连接回调
void onConnected(AMQP::Connection* connection) {std::cout << "Connected to RabbitMQ successfully!" << std::endl;// 创建通道AMQP::Channel* channel = connection->createChannel();// 声明队列(队列名:test_queue,持久化:false,自动删除:false)channel->declareQueue("test_queue", AMQP::durable(false), AMQP::autodelete(false)).onSuccess([](const std::string& queueName, uint32_t messageCount, uint32_t consumerCount) {std::cout << "Queue '" << queueName << "' declared successfully!" << std::endl;});
}// 错误回调
void onError(AMQP::Connection* connection, const char* message) {std::cerr << "RabbitMQ error: " << message << std::endl;ev_break(loop, EVBREAK_ALL);  // 退出事件循环
}int main() {// 创建 TCP 连接(服务器 IP:127.0.0.1,端口:5672)AMQP::TcpConnection connection(loop, AMQP::Address("amqp://root:123456@127.0.0.1:5672/"));// 设置连接回调connection.onConnected(onConnected);connection.onError(onError);// 启动事件循环ev_run(loop, 0);return 0;
}

编译与运行

将上述代码保存为 test_rabbitmq.cpp,通过以下命令编译(链接 AMQPevssl 库):

g++ test_rabbitmq.cpp -o test_rabbitmq -lAMQP -lev -lssl -lcrypto

运行程序,若输出 Connected to RabbitMQ successfully!Queue 'test_queue' declared successfully!,则表示客户端库安装正常,且能成功连接 RabbitMQ。

总结

本文从 RabbitMQ 服务端安装、用户配置、Web 管理界面启用,到 C/C++ 客户端库部署,再到 SSL 错误解决,覆盖了 Ubuntu 系统下 RabbitMQ 开发的完整流程。核心要点:

  1. 服务端需注意用户权限配置和端口开放,确保远程访问正常;
  2. 客户端依赖 libevopenssl,需提前安装;
  3. SSL 版本冲突是常见坑,通过强制卸载 + 重新安装可解决;
  4. 安装后通过简单代码验证,确保库文件链接正常。

RabbitMQ 命令行工具

在 Ubuntu 系统中,rabbitmqctl 是 RabbitMQ 提供的命令行工具,用于管理 RabbitMQ 服务器(节点)、用户、虚拟主机、交换机、队列等核心组件。以下是其常用命令及详解:

一、基础操作

1. 启动 / 停止 RabbitMQ 服务
# 启动服务
sudo systemctl start rabbitmq-server# 停止服务
sudo systemctl stop rabbitmq-server# 重启服务
sudo systemctl restart rabbitmq-server# 查看服务状态
sudo systemctl status rabbitmq-server
2. 检查节点状态
rabbitmqctl status
  • 显示当前节点的详细状态(进程信息、内存使用、插件、集群状态等)。

二、用户管理

RabbitMQ 依赖用户进行权限控制,默认用户为 guest(仅允许本地访问)。

1. 列出所有用户
rabbitmqctl list_users
2. 创建用户
rabbitmqctl add_user <用户名> <密码>
# 示例:创建用户 alice,密码 123456
rabbitmqctl add_user alice 123456
3. 删除用户
rabbitmqctl delete_user <用户名>
4. 修改用户密码
rabbitmqctl change_password <用户名> <新密码>
5. 设置用户角色

角色决定用户权限,常用角色:

  • administrator:完全权限(管理所有资源)。
  • monitoring:监控权限(查看状态,无修改权限)。
  • policymaker:可管理策略。
  • management:仅可通过管理界面操作。
  • 空角色:仅能访问授权的虚拟主机。
rabbitmqctl set_user_tags <用户名> <角色1> <角色2>...
# 示例:给 alice 分配管理员角色
rabbitmqctl set_user_tags alice administrator

三、虚拟主机管理

虚拟主机(vhost)用于隔离不同项目的资源(交换机、队列等),默认虚拟主机为 /

1. 列出所有虚拟主机
rabbitmqctl list_vhosts
2. 创建虚拟主机
rabbitmqctl add_vhost <vhost名称>
# 示例:创建 vhost myapp
rabbitmqctl add_vhost myapp
3. 删除虚拟主机
rabbitmqctl delete_vhost <vhost名称>
4. 设置用户对虚拟主机的权限

权限格式:配置权限 写权限 读权限,用正则表达式表示(.* 表示所有资源)。

rabbitmqctl set_permissions -p <vhost名称> <用户名> <配置权限> <写权限> <读权限>
# 示例:允许 alice 对 myapp 虚拟主机有全部权限
rabbitmqctl set_permissions -p myapp alice ".*" ".*" ".*"
5. 查看用户在虚拟主机的权限
rabbitmqctl list_permissions -p <vhost名称>
# 或查看指定用户的权限
rabbitmqctl list_user_permissions <用户名>

四、交换机与队列管理

1. 列出交换机
rabbitmqctl list_exchanges -p <vhost名称>
# 可选参数:添加列(如 name, type, durable)
rabbitmqctl list_exchanges -p myapp name type durable
2. 列出队列
rabbitmqctl list_queues -p <vhost名称>
# 常用列:name(名称)、messages(消息数)、durable(是否持久化)
rabbitmqctl list_queues -p myapp name messages durable
3. 删除队列
rabbitmqctl delete_queue -p <vhost名称> <队列名>
# 强制删除(即使队列正在被使用)
rabbitmqctl delete_queue -p myapp myqueue --if-empty  # 仅空队列
rabbitmqctl delete_queue -p myapp myqueue --if-unused  # 仅未被使用的队列
4. 清除队列消息
rabbitmqctl purge_queue -p <vhost名称> <队列名>

五、连接与通道管理

1. 列出连接
rabbitmqctl list_connections
# 常用列:pid(进程ID)、user(用户)、vhost、address(客户端地址)
rabbitmqctl list_connections pid user vhost address
2. 关闭连接
rabbitmqctl close_connection <连接PID> <关闭原因>
3. 列出通道
rabbitmqctl list_channels
# 常用列:pid、user、vhost、consumer_count(消费者数)

六、集群管理(高级)

1. 查看集群状态
rabbitmqctl cluster_status
2. 加入集群

在从节点执行(需先停止节点,重置数据):

sudo systemctl stop rabbitmq-server
rabbitmqctl reset
rabbitmqctl join_cluster <主节点名称>  # 主节点名称格式:rabbit@主机名
sudo systemctl start rabbitmq-server
3. 从集群移除节点

在主节点执行:

rabbitmqctl forget_cluster_node <节点名称>

七、其他常用命令

  1. 启用插件(如管理界面插件):

    rabbitmq-plugins enable rabbitmq_management
    

    启用后可通过 http://localhost:15672 访问管理界面(默认用户 guest/guest)。

  2. 重置节点(清空所有数据,谨慎使用):

    rabbitmqctl reset
    
  3. 强制同步镜像队列

    rabbitmqctl sync_queue <队列名> -p <vhost名称>
    

帮助与文档

  • 查看所有命令:rabbitmqctl help
  • 查看具体命令帮助:rabbitmqctl help <命令名>(如 rabbitmqctl help add_user
http://www.dtcms.com/a/502821.html

相关文章:

  • 网站开发外包 价格阿里巴巴国际站入驻费用及条件
  • MVVM架构模式详解:从原理到Android实战
  • 【Pico企业版】Pico企业版的多种Wifi快速连接方式(Pico 4UE的快捷Wifi连接技巧)
  • Kafka服务端处理producer请求原理解析
  • 以电商系统为例,理解用户体验五层模型
  • 兰州网站开发企业学校门户网站建设
  • CreArt2.5.7 | 无限AI图片生成,将文字描述转化为艺术作品
  • Linux企业级解决方案架构:字节跳动短视频推荐系统全链路实践
  • Python编程之常用模块
  • ios面试底层题目
  • h5游戏免费下载:《高达战争》
  • 百度网盘不限速2025年最新方法
  • 网站维护大概要多久学校英文网站建设申请
  • 深入比较 Rust 与 Go:并发时代的两把利剑
  • 容器安全:gVisor系统调用过滤,攻击面缩小?
  • 前端基础二、CSS(二)、CSS基础选择器
  • 学做电影网站asp.net门户网站项目怎么做
  • 云主机搭建多个网站专业型网站网站
  • 【Linux学习笔记】线程同步与互斥之生产者消费者模型
  • C++函数使用
  • 立创EDA专业版使用技巧——全部框选与部分框选
  • yii2添加新的modules完为什么访问的时候报错404
  • HTML 头部
  • 内存流 + NPOIExcel, 读取Excel单元格内容
  • 文件包含漏洞全解析:从原理到实战
  • 【深度学习新浪潮】天数天算、地数天算与天地同算:概念解析与SOTA解决方案
  • 《C++ Web 自动化测试实战:常用函数全解析与场景化应用指南》
  • 在线做数据图的网站网站建设 鸿
  • K8s HTTPS流量管理实战:GatewayAPI指南
  • stable-diffusion-webui 安装环境