Ubuntu 上使用 RabbitMQ 的完整步骤
一 安装与启动
- 更新软件源并安装:sudo apt update && sudo apt install -y rabbitmq-server
- 启动服务并设置开机自启:sudo systemctl start rabbitmq-server && sudo systemctl enable rabbitmq-server
- 验证运行状态:sudo rabbitmqctl status(看到节点与 Erlang 信息即为正常)
二 安全与用户管理
- 创建管理员用户(示例用户名为admin,密码自定义):sudo rabbitmqctl add_user admin StrongPass!
- 授予管理员标签:sudo rabbitmqctl set_user_tags admin administrator
- 为默认虚拟主机授予权限:sudo rabbitmqctl set_permissions -p / admin “." ".” “.*”
- 建议禁用默认的 guest 远程登录(仅本地可登录更安全):在配置文件 /etc/rabbitmq/rabbitmq.conf 中添加或修改:loopback_users.guest = false,然后重启服务:sudo systemctl restart rabbitmq-server
三 启用管理界面与访问
- 启用管理插件:sudo rabbitmq-plugins enable rabbitmq_management
- 访问地址:http://服务器IP:15672(默认账号密码为 guest/guest,建议创建新用户后禁用或删除默认账号)
- 如启用防火墙,放行端口:sudo ufw allow 15672/tcp(云服务器还需在云安全组放行 15672)
四 Python 快速上手示例
- 安装客户端库:pip install pika
- 生产者示例 send.py
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello', durable=True)
channel.basic_publish(
exchange='',
routing_key='hello',
body='Hello RabbitMQ!',
properties=pika.BasicProperties(delivery_mode=2),
)
print(" [x] Sent 'Hello RabbitMQ!'")
connection.close()
import pika
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
ch.basic_ack(delivery_tag=method.delivery_tag)
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello', durable=True)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(queue='hello', on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
- 运行顺序:先启动消费者 python receive.py,再运行生产者 python send.py
五 常用运维命令与排错
- 常用命令
- 查看状态:sudo rabbitmqctl status
- 列出插件:sudo rabbitmq-plugins list
- 启用插件:sudo rabbitmq-plugins enable <插件名>
- 停止/重启服务:sudo systemctl stop|restart rabbitmq-server
- 创建虚拟主机:sudo rabbitmqctl add_vhost myvhost
- 设置虚拟主机权限:sudo rabbitmqctl set_permissions -p myvhost user “." ".” “.*”
- 常见问题
- 管理界面打不开:确认已启用 rabbitmq_management、防火墙放行 15672、服务已启动
- 远程无法登录:默认 guest 仅本地可登录,创建新用户并分配权限,或在配置中禁用 guest 远程登录
- 消息丢失:队列/消息设置为 durable=True,发布时设置 delivery_mode=2,消费者处理完成后进行 ack