Ubuntu 上使用 RabbitMQ 的完整步骤
一 安装与启动
- 更新索引并安装服务(会自动安装所需依赖,如 Erlang):
- sudo apt update
- sudo apt install -y rabbitmq-server
- 启动并设置开机自启:
- sudo systemctl start rabbitmq-server
- sudo systemctl enable rabbitmq-server
- 常用运维命令:
- 查看状态:sudo systemctl status rabbitmq-server
- 停止/重启:sudo systemctl stop|restart rabbitmq-server
- 说明:安装完成后服务默认已启动;如未启动,请执行上面的 start 命令。
二 启用管理界面与访问
- 启用管理插件:
- sudo rabbitmq-plugins enable rabbitmq_management
- 访问地址与默认凭据:
- 本机访问:http://localhost:15672
- 默认账号/密码:guest/guest
- 远程访问要点:
- 出于安全策略,guest 账号仅允许从 localhost 登录;远程访问需创建新用户并授权(见下一节)。
三 用户与权限配置
- 创建管理员用户(示例用户名为 admin,密码自定义):
- sudo rabbitmqctl add_user admin StrongPass!
- 授予管理员角色:
- sudo rabbitmqctl set_user_tags admin administrator
- 为默认 / 虚拟主机授予全部权限:
- sudo rabbitmqctl set_permissions -p / admin “." ".” “.*”
- 常用用户管理命令:
- 列出用户:rabbitmqctl list_users
- 修改密码:rabbitmqctl change_password admin NewPass!
- 删除用户:rabbitmqctl delete_user admin
- 完成后,可用新建账号通过 http://服务器IP:15672 登录管理界面。
四 常用端口与云服务器安全组
- 关键端口与用途:
- 5672:AMQP 客户端通信端口
- 15672:管理 Web 界面
- 25672:集群通信端口(如部署集群)
- 云服务器需放行对应端口(安全组/防火墙),否则外网无法访问。
五 Python 快速上手示例
- 安装客户端库:
- 生产者 new_task.py(向队列 task_queue 发送消息):
- 代码示例:
- import pika, sys
- connection = pika.BlockingConnection(pika.ConnectionParameters(host=‘localhost’))
- channel = connection.channel()
- channel.queue_declare(queue=‘task_queue’, durable=True)
- message = ’ '.join(sys.argv[1:]) or “No new task”
- channel.basic_publish(
exchange=‘’,
routing_key=‘task_queue’,
body=message,
properties=pika.BasicProperties(delivery_mode=2), # 消息持久化
)
- print(f" [x] Sent {message}")
- connection.close()
- 消费者 worker.py(消费并处理任务):
- 代码示例:
- import pika, time
- connection = pika.BlockingConnection(pika.ConnectionParameters(host=‘localhost’))
- channel = connection.channel()
- channel.queue_declare(queue=‘task_queue’, durable=True)
- def callback(ch, method, properties, body):
- print(f" [x] Received {body}")
- time.sleep(body.count(b’.'))
- print(" [x] Done")
- ch.basic_ack(delivery_tag=method.delivery_tag)
- channel.basic_qos(prefetch_count=1)
- channel.basic_consume(queue=‘task_queue’, on_message_callback=callback)
- print(" [*] Waiting for messages. To exit press CTRL+C")
- channel.start_consuming()
- 运行方式:
- 终端1:python3 new_task.py “Hello RabbitMQ”
- 终端2:python3 worker.py
- 说明:上述示例使用工作队列模式,队列与消息均设为持久化,消费者手动确认(ACK)。