百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

从 0 到 1:在 Linux 上搭建高效的 RabbitMQ 消息队列

ahcoder 2025-04-09 13:44 9 浏览



1. 为什么选择 RabbitMQ?


在分布式系统中,消息队列(Message Queue)用于解耦服务、提高系统吞吐量。RabbitMQ 是一个基于 AMQP(高级消息队列协议)的消息代理,因其高可靠性、可扩展性、丰富的插件系统而被广泛应用。


RabbitMQ 适用场景:

o 微服务架构:不同服务之间解耦,提高系统稳定性

o 异步任务处理:降低系统负载,提高响应速度

o 事件驱动架构:支持实时数据流处理,如日志收集、用户行为跟踪

o 分布式系统通信:多个服务之间进行可靠的消息传递




2. 安装 RabbitMQ(适用于 Ubuntu / Debian)


2.1 安装 Erlang(RabbitMQ 依赖)


RabbitMQ 依赖 Erlang 运行环境,先安装 Erlang:

sudo apt update && sudo apt install -y erlang

安装完成后,检查版本:

erl -version

2.2 安装 RabbitMQ


从官方仓库下载并安装 RabbitMQ:

sudo apt install -y rabbitmq-server

启用 RabbitMQ 并设置为开机自启:

sudo systemctl enable rabbitmq-server

sudo systemctl start rabbitmq-server

检查服务状态:

sudo systemctl status rabbitmq-server

如果 RabbitMQ 正常运行,会显示 active (running) 状态。




3. RabbitMQ 基础配置


3.1 启用管理插件


RabbitMQ 自带一个 Web 管理界面,默认未启用,可通过以下命令开启:

sudo rabbitmq-plugins enable rabbitmq_management

管理界面默认监听 15672 端口,可以通过浏览器访问:

http://服务器IP:15672

默认账号 guest,密码 guest(仅限本机访问)。


3.2 创建管理员账户


为了安全性,建议创建一个新管理员账户:

sudo rabbitmqctl add_user admin yourpassword

sudo rabbitmqctl set_user_tags admin administrator

sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

然后使用 admin / yourpassword 登录 Web 界面管理 RabbitMQ。




4. RabbitMQ 消息队列基础操作


4.1 创建虚拟主机(VHost)


RabbitMQ 使用 虚拟主机(VHost) 进行消息隔离,可以创建不同的 VHost 来管理不同的业务场景:

sudo rabbitmqctl add_vhost my_vhost

4.2 创建用户并赋权


创建一个 my_user 用户,并赋予 my_vhost 的读写权限:

sudo rabbitmqctl add_user my_user mypassword

sudo rabbitmqctl set_permissions -p my_vhost my_user ".*" ".*" ".*"





5. 使用 Python 连接 RabbitMQ


安装 pika 库(RabbitMQ 的 Python 客户端):

pip install pika

5.1 生产者(发送消息)


创建 producer.py:

import pika


# 连接 RabbitMQ 服务器

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))

channel = connection.channel()


# 创建队列

channel.queue_declare(queue='hello')


# 发送消息

channel.basic_publish(exchange='', routing_key='hello', body='Hello, RabbitMQ!')


print(" [x] Sent 'Hello, RabbitMQ!'")


connection.close()

运行:

python producer.py

5.2 消费者(接收消息)


创建 consumer.py:

import pika


# 连接 RabbitMQ 服务器

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))

channel = connection.channel()


# 确保队列存在

channel.queue_declare(queue='hello')


# 定义回调函数

def callback(ch, method, properties, body):

print(f" [x] Received {body.decode()}")


# 监听队列

channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)


print(' [*] Waiting for messages. To exit press CTRL+C')

channel.start_consuming()

运行:

python consumer.py

当 producer.py 发送消息后,consumer.py 就会收到并打印出来。




6. RabbitMQ 高级特性


6.1 交换机(Exchange)与路由(Routing)


RabbitMQ 使用 交换机 控制消息的分发方式:

o Direct(直连交换机):基于 routing_key 精确匹配

o Fanout(广播交换机):消息发送到所有绑定队列

o Topic(主题交换机):支持通配符匹配(logs.*,*.info)

o Headers(头部交换机):基于消息头属性进行匹配


示例:创建一个 direct 类型交换机并绑定队列:

channel.exchange_declare(exchange='direct_logs', exchange_type='direct')


channel.queue_bind(exchange='direct_logs', queue='hello', routing_key='info')

6.2 持久化队列


默认 RabbitMQ 重启后消息会丢失,可以开启持久化:

channel.queue_declare(queue='hello', durable=True)

消息发送时也需要标记持久化:

channel.basic_publish(exchange='', routing_key='hello', body='Hello, RabbitMQ!',

properties=pika.BasicProperties(delivery_mode=2))





7. 监控与优化


7.1 RabbitMQ 状态监控


查看所有队列:

sudo rabbitmqctl list_queues

查看所有连接:

sudo rabbitmqctl list_connections

7.2 调优 RabbitMQ 性能

o 调整 rabbitmq.conf 文件中的 vm_memory_high_watermark,控制内存使用率

o 采用 Lazy Queue(懒加载队列),减少内存占用:

sudo rabbitmqctl set_policy lazy "^lazy-queue$" '{"queue-mode":"lazy"}' --apply-to queues


o 限制队列最大长度,防止队列堆积:

arguments={'x-max-length': 1000}





8. 总结


本教程从零开始搭建了一个 RabbitMQ 服务器,并介绍了基本的消息收发、用户管理、队列持久化及优化方法。RabbitMQ 在分布式架构、微服务、实时数据处理等场景中应用广泛,掌握这些知识能帮助你构建更高效的系统。

相关推荐

Linux 6.15将更新媒体子系统:高通Iris驱动首次亮相

IT之家3月24日消息,科技媒体phoronix昨日(3月23日)发布博文,报道称Linux6.15内核将于本周启动合并窗口,首批提交的PullRequest请求之一,就...

Ubuntu 25.04发行版登场:Linux 6.14内核,带来多项技术革新

IT之家4月18日消息,科技媒体linuxiac昨日(4月17日)发布博文,报道称代号为PluckyPuffin的Ubuntu25.04发行版正式上线,搭载最新Linu...

WordPress 6.8 版本发布:聚焦性能升级,代号“Cecil”

WordPress6.8版本发布:聚焦性能升级,代号“Cecil”全球最受欢迎的内容管理系统(CMS)WordPress正式推出最新版本6.8,代号“塞西尔”(Cecil),以此致敬传奇钢琴家...

Linus Torvalds接受微软Hyper-V升级 下一代Linux启动会更快

虽然Windows的粉丝和Linux的粉丝经常喜欢进行激烈的键盘大战,但操作系统的制造商们自己也了解彼此的优缺点。毫无疑问,微软也明白这一点,事实上,它甚至鼓励用户尝试Linux,尽管是使用...

Debian 12发布:Linux内核升级6.1(debian更新内核)

IT之家6月11日消息,Debian是最古老的GNU/Linux发行版之一,也是许多其他基于Linux的操作系统的基础,包括Ubuntu、Kali、MX和树莓派OS等。这...

Linux Mint预告新功能:升级Nemo搜索、LMDE 7支持OEM安装

IT之家4月10日消息,LinuxMint发布了最新月度简讯,宣布增强Nemo文件管理器的文件搜索功能、Cinnamon桌面环境开始支持Wayland、LMDE7(LinuxM...

Linux 6.2合并大量网络系统更新:推进Wi-Fi 7和800 Gbps网络

IT之家12月15日消息,Linux6.2合并窗口期内已经确认将会合并大量网络子系统更新。和以往版本相同,Linux6.2内核更新周期在网络功能上有大量的改进,更多的细节可以访问这条...

Linux内核升级实践指南(linux内核怎么升级)

Linux内核升级是一个需要谨慎操作的过程,但掌握正确方法后可以显著提升系统性能、安全性或硬件兼容性。以下是一份详细的实践指南,涵盖主流方法及注意事项:一、准备工作查看当前内核版本bashuname...

Linux又将迎来大版本更新 5.20版可能会被称为Linux 6.0

如果你错过了昨天Linux5.19的发布公告,那么这一消息需要回顾一下:被称为Linux5.20的开发中的内核很可能会被称为Linux6.0。根据LinusTorvalds对现代版本的划分,L...

周六的娱乐就是安装一台OracleLinux虚拟机(一)

每个人有每个人的娱乐方式。老父亲可能喜欢摆弄一些机械工具修修补补。我趁着周六安装一套OracleLinux,寓学于乐。在oracle网站上,下载VirtualBox,现在最新版本是7.0.8。在安装过...

Linux系统下Gaussian 16的安装(linux系统如何安装新软件)

Gaussian是目前使用最多的量子化学计算软件,当前最新的版本为Gaussian16C.01。理论上来说Gaussian并不需要安装,因为高斯一般是不出售源代码的,只有二进制文件,以Gaussi...

「Linux基础」VMWare虚拟机安装CentOS后配置静态ip

在VMWare中安装本地虚拟机CentOS7操作系统,动态IP地址会经常变化,不便于管理与实验。为了便于实验,考虑设置成静态IP地址,目标是本地局域网可以通过NAT网关互相访问,且能连接互联网。由于是...

Win10虚拟机,Hyper-V安装CentOS,一次成功

打开控制面板,选择程序选择启用或关闭Windows功能选中Hyper-V下所有的组件。提示我们需要,重启计算机,保存我们的文件,之后点击“立即重新启动”选择开始菜单,输入Hy,就可以打开虚拟机管理器了...

如何在Windows 10中的Hyper-V虚拟机上安装CentOS Linux

注意双重引导的一种可行且相当不错的替代方法是在虚拟机上安装各种操作系统。Microsoft正式支持CentOS作为Hyper-V的来宾OS,并且在安装时可以很好地集成。自CentOS6.4版以来,用...

安装Linux虚拟机的5个理由,以及不安装的5个原因

虚拟机(VM)允许你在不永久更改计算机的情况下探索Linux。如果你对Linux很好奇,但犹豫是否要尝试,VM提供了一个安全、灵活的解决方案。如果这是你第一次听说虚拟机,虚拟机就像“计算机中的计算机”...