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

生产搭建Rabbitmq

什么是 RabbitMQ?
简单说,RabbitMQ 是一个消息中间件,可以理解为 “消息邮局”:
当你的应用程序需要给另一个应用程序发送信息(比如订单通知、数据同步等),不需要直接 “面对面” 传递,而是通过 RabbitMQ 中转。
发送方把消息放进 RabbitMQ(相当于 “寄信”),接收方从 RabbitMQ 取消息(相当于 “收信”)。
这样即使接收方暂时故障,消息也不会丢失,等它恢复后再取走处理,保证了系统的稳定。

生产中 RabbitMQ 怎么工作?
举个例子:电商平台的 “下单流程”
用户在 APP 上下单(应用 A),需要通知库存系统减库存(应用 B)、支付系统生成账单(应用 C)。
应用 A 不用直接调用 B 和 C,而是把 “订单信息” 作为消息发给 RabbitMQ。
RabbitMQ 收到消息后,会暂存起来,然后分别推给正在 “监听” 的应用 B 和 C。
B 和 C 收到消息后,各自处理(减库存、生成账单),处理完后告诉 RabbitMQ “已完成”。
整个过程中,RabbitMQ 就像一个 “中转站”,解决了应用之间的直接依赖(比如 A 不用等 B 处理完再工作),也避免了某一个应用故障导致整个流程卡住。

RabbitMQ 与谁连接工作?
主要和各种应用程序连接,这些应用分为两类:
生产者:发送消息到 RabbitMQ 的应用(比如上面的下单 APP)。
消费者:从 RabbitMQ 接收消息的应用(比如上面的库存系统、支付系统)。
这些应用可以是不同语言开发的(Java、Python、Go 等),只要通过 RabbitMQ 提供的 “客户端库”(比如 Java 的 amqp-client、Python 的 pika),就能和 RabbitMQ 通信。

关于 Java 的说明:
提到 Java 的 amqp-client,并不是说连接 RabbitMQ 的机器必须安装 Java 服务。
客户端库(比如 amqp-client)是给Java 开发的应用程序用的 “工具包”,就像 Python 用 pika、Go 用 amqp 库一样。
比如:如果你的库存系统是用 Java 写的,那这个系统的代码里需要引入 amqp-client 库,才能和 RabbitMQ 通信;如果库存系统是 Python 写的,就用 pika 库,和机器上有没有 Java 没关系。
简单说:客户端库是 “应用程序代码里的工具”,和机器上安装什么语言的服务无关,只和应用程序本身的开发语言有关。

安装依赖
apt install -y curl gnupg apt-transport-https

安装 Erlang(RabbitMQ 依赖)
RabbitMQ 是基于 Erlang 开发的,需要先安装 Erlang 环境

添加Erlang仓库

curl -fsSL https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo gpg --dearmor -o /usr/share/keyrings/erlang-solutions-archive-keyring.gpg

【curl: (22) The requested URL returned error: 504】
【curl: (28) Failed to connect to github.com port 443 after 135364 ms: Couldn't connect to server
gpg: no valid OpenPGP data found.】

rm -f /usr/share/keyrings/erlang-solutions-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/erlang-solutions-archive-keyring.gpg] https://packages.erlang-solutions.com/ubuntu $(lsb_release -cs) contrib" | sudo tee /etc/apt/sources.list.d/erlang-solutions.list > /dev/null

【# 安装Erlang
sudo apt update
sudo apt install -y erlang】

换一种方式安装 Erlang(避开这个密钥问题):
直接使用 Ubuntu 默认仓库中的 Erlang 版本(兼容性有保障,适合生产环境):

更新仓库

sudo apt update

安装默认仓库的Erlang

sudo apt install -y erlang

验证 Erlang 是否安装成功:
erl -version

【# 添加RabbitMQ仓库
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/rabbitmq-archive-keyring.gpg] https://packages.rabbitmq.com/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list > /dev/null

安装RabbitMQ

sudo apt update
sudo apt install -y rabbitmq-server】

手动下载密钥(推荐,避开服务器网络限制)
在本地电脑浏览器打开链接:
https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc

gpg --dearmor -o /usr/share/keyrings/rabbitmq-archive-keyring.gpg ./rabbitmq-release-signing-key.asc

ls -lh /usr/share/keyrings/rabbitmq-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/rabbitmq-archive-keyring.gpg] https://packages.rabbitmq.com/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list > /dev/null
执行完后apt update出错

【从输出可以看到,问题出在服务器无法解析 packages.rabbitmq.com 这个域名(Could not resolve 'packages.rabbitmq.com'),导致无法访问 RabbitMQ 的官方仓库。这通常是 DNS 解析问题】

nslookup packages.rabbitmq.com

修改服务器的 DNS 配置,使用公共 DNS(如阿里云 DNS、谷歌 DNS):

vim /etc/resolv.conf
nameserver 223.5.5.5 # 阿里云DNS
nameserver 8.8.8.8 # 谷歌DNS(备选)

apt update 后再次nslookup仍然不行

【从输出来看,即使更换了阿里云 DNS(223.5.5.5),仍然无法解析 packages.rabbitmq.com(NXDOMAIN 表示域名无解析记录),可能是该域名在当前网络环境中存在访问限制,或 DNS 缓存问题。此时直接绕开官方仓库,改用 国内镜像源 是更高效的解决方案,具体步骤如下:】

  1. 彻底删除原 RabbitMQ 官方仓库配置
    避免后续更新时仍尝试访问无效的官方源:
    sudo rm -f /etc/apt/sources.list.d/rabbitmq.list

  2. 添加国内 RabbitMQ 镜像源(以阿里云镜像为例,稳定且国内访问快)
    执行命令添加阿里云的 RabbitMQ 镜像仓库配置,同时关联之前已准备好的密钥:
    echo "deb [signed-by=/usr/share/keyrings/rabbitmq-archive-keyring.gpg] http://mirrors.aliyun.com/rabbitmq/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list > /dev/null

【# 如果阿里云镜像源仍有问题,也可尝试其他国内镜像源 华为云RabbitMQ镜像源】
echo "deb [signed-by=/usr/share/keyrings/rabbitmq-archive-keyring.gpg] https://mirrors.huaweicloud.com/rabbitmq/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list > /dev/null

  1. 清除 APT 缓存并重新更新

清除旧缓存,避免残留的官方源信息干扰

apt clean && sudo apt autoclean

重新更新仓库索引(此时会访问阿里云镜像源)

apt update

从输出可以看到,阿里云的 RabbitMQ 镜像源没有针对你当前系统版本(noble,Ubuntu 24.04)的 Release 文件(404 错误),这是因为国内部分镜像源可能暂时未同步最新系统版本的仓库。
解决方法:直接使用 Ubuntu 系统默认仓库中的 RabbitMQ(无需额外配置第三方源,兼容性有保障),步骤如下:

  1. 删除无效的阿里云 RabbitMQ 仓库配置
    sudo rm -f /etc/apt/sources.list.d/rabbitmq.list

  2. 直接从系统默认仓库安装 RabbitMQ
    buntu 默认仓库已包含 RabbitMQ,虽然版本可能不是最新,但稳定性经过验证,适合生产环境:

更新系统默认仓库

sudo apt update

安装默认仓库中的RabbitMQ

sudo apt install -y rabbitmq-server

检查服务状态

sudo systemctl status rabbitmq-server

若未启动,手动启动并设置开机自启

sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server

rabbitmq-plugins enable rabbitmq-management

【出现 {:plugins_not_found, [:"rabbitmq-management"]} 错误,说明系统中没有找到 rabbitmq-management 插件,通常是因为安装的 RabbitMQ 缺少对应的插件包。可以按以下步骤解决:】

  1. 安装 RabbitMQ 管理插件包
    Ubuntu 系统中,管理插件通常在独立的 rabbitmq-server 包或额外的插件包中,执行以下命令确保相关组件安装完整:

重新安装 RabbitMQ 及其插件(确保包含管理插件)

sudo apt install -y --reinstall rabbitmq-server rabbitmq-server-core

出现 "Unable to locate package rabbitmq-server-core" 错误,说明系统的软件源中没有这个包(该包名可能已过时或不存在于当前 Ubuntu 版本的仓库中)。可以直接忽略这个包,专注于正确安装和启用管理插件:

仅重新安装 rabbitmq-server(它已包含核心组件):
sudo apt install -y --reinstall rabbitmq-server

确认管理插件是否在安装目录中:
查看 RabbitMQ 插件目录,确认管理插件存在:

ls -l /usr/lib/rabbitmq/lib/rabbitmq_server-*/plugins/ | grep management

启用管理插件(可选,提供Web管理界面)

sudo rabbitmq-plugins enable rabbitmq_management

创建管理员用户

sudo rabbitmqctl add_user admin your_strong_password
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin "." "." ".*"

(可选)删除默认guest用户(生产环境建议删除)

sudo rabbitmqctl delete_user guest

配置防火墙(如果需要远程访问)

允许RabbitMQ端口

sudo ufw allow 5672/tcp # AMQP协议端口
sudo ufw allow 15672/tcp # 管理界面端口
sudo ufw reload

http://x.x.x.x:15672 【5672】

查看版本
rabbitmqctl version

查看 Erlang 版本
rabbitmqctl status | grep "Erlang version"

http://www.wxhsa.cn/company.asp?id=390

相关文章:

  • 【项目实战】基于i.MX8M Plus的人工智能小车(AGV导航、视觉避障、自动跟随、颜色识别、防跌落)有教程代码
  • unity TimeLine SignalTrack
  • macOS Tahoe 26 RC (25A353) Boot ISO 原版可引导镜像下载
  • 企业如何选型低代码平台?4款产品测评
  • 对于退款/拒付这类逆向订单操作需要创建新的单号么
  • torch版本应该跟cuda、cudacnn的版本一致
  • 小白如何零成本搭建一个属于自己的私人知识库
  • 安装mysql数据库,从下载到配置的详细教程
  • 根据端口找到进程id
  • 双因子验证网站(aspsms.com/en/registration/)无法注册——Capcha Error
  • MathType7下载安装2025最新下载+安装教程(附安装包)
  • mysql导入数据库,从基础命令到高效技巧
  • 基于“北斗+卫星互联网”的低空飞行服务保障基础设施
  • [BJOI2018] 染色 题解
  • 【完结10章】Java大模型工程能力必修课,LangChain4j 入门到实践
  • CVE-2025-30208 Vite开发服务器任意文件读取漏洞
  • Claude Code 从入门到精通:最全配置指南和工具推荐
  • 故障分析:11GR DATAGRUAD环境BROKER配置Fast-Start Failover
  • Cesium Shader内置变量 czm_*
  • IDA Pro 9.2 发布 - 强大的反汇编程序、反编译器和多功能调试器
  • 传统
  • Java 那些基础又关键的事儿
  • 2025-09-10
  • Codeforces Round 1047 (Div. 3)
  • sentinel-1.8.0 安装
  • 数据结构与算法-27.树-并查集
  • wpf XAML设计器在加载用户控件的时候,提示null引用等直接执行了用户控件里构造函数代码的问题
  • 设计模式-策略
  • Linux中怎么调整系统inode数量?
  • DARPA AI网络挑战赛技术框架全解析:自动化漏洞挖掘与修复系统构建