温馨提示×

RabbitMQ消息队列Ubuntu上如何使用

小樊
37
2025-12-07 00:01:53
栏目: 智能运维

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 快速上手示例

  • 安装客户端库:
    • pip3 install pika
  • 生产者 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)。

0