Skip to content

RabbitMQ:安装与 AMQP 起点 ​

本轮仅静态审阅,以下命令与练习均未执行;预期结果不是本轮运行证据。早期真实服务验证仅为历史记录,不能代替当前环境验证。

实验环境 ​

需要 Docker、Compose v2、Python 3.12;Windows PowerShell 与 Linux shell 从仓库根目录执行。本课程固定 RabbitMQ 4.2.5-management,用 AMQP 0-9-1 和 Pika 1.3.2。固定版本用于可复现,不表示最新版本。本机 AMQP 端口 25672 映射容器 5672,管理页 25673 映射 15672,不能将管理页端口填到 AMQP 驱动。

Windows Docker Desktop 运行 Linux 容器,不是 Windows 原生 RabbitMQ 安装。student/local-lab-only 是隔离实验凭据,只绑定 127.0.0.1;不要开放公网。一个节点不提供 quorum 故障容忍,本课程选用持久 classic queue 展示基本消息生命周期。

yaml
services:
  init:
    image: rabbitmq:4.2.5-management@sha256:e43ca03df740d48770641b56ce1a26913c74a31e47c1ed36a58e8d91c10731b9
    container_name: showdocs-m4b-rabbitmq-init
    user: '0:0'
    entrypoint: ['sh', '-c', 'chown 999:999 /var/lib/rabbitmq; if [ -f /var/lib/rabbitmq/.erlang.cookie ]; then chown 999:999 /var/lib/rabbitmq/.erlang.cookie; chmod 600 /var/lib/rabbitmq/.erlang.cookie; fi']
    volumes: ['data:/var/lib/rabbitmq']
  broker:
    image: rabbitmq:4.2.5-management@sha256:e43ca03df740d48770641b56ce1a26913c74a31e47c1ed36a58e8d91c10731b9
    container_name: showdocs-m4b-rabbitmq-broker
    depends_on:
      init:
        condition: service_completed_successfully
    hostname: showdocs-m4b-rabbitmq-broker
    ports: ['127.0.0.1:25672:5672', '127.0.0.1:25673:15672']
    environment:
      RABBITMQ_DEFAULT_USER: student
      RABBITMQ_DEFAULT_PASS: local-lab-only
    volumes: ['data:/var/lib/rabbitmq']
volumes:
  data:
    name: showdocs-m4b-rabbitmq-data
sh
docker compose -p showdocs-m4b-rabbitmq -f examples/rabbitmq/compose.yaml up -d
docker exec showdocs-m4b-rabbitmq-broker rabbitmq-diagnostics -q ping
docker exec showdocs-m4b-rabbitmq-broker rabbitmqctl version

ping 成功表示节点运行;应用还要用真实 AMQP 连接声明资源并发布,不能把管理 UI 能打开当生产消费成功。首次启动应有界重试,80 秒仍未就绪就查日志。

连接与命令 ​

rabbitmq-diagnostics 用于节点诊断,rabbitmqctl 用于查看队列和连接。它们在容器内部使用 Erlang cookie 访问管理能力,和业务 AMQP 用户不是同一条认证路径。

sh
docker exec showdocs-m4b-rabbitmq-broker rabbitmqctl list_queues name messages_ready messages_unacknowledged durable
docker exec showdocs-m4b-rabbitmq-broker rabbitmqctl list_bindings source_name destination_name routing_key
docker logs --tail 80 showdocs-m4b-rabbitmq-broker

unacknowledged 表示尚未完成确认的投递。messages_ready 是待投递数量,messages_unacknowledged 是已投递未确认数量;只看 ready=0 可能遗漏正在处理但尚未 ack 的消息。资源名都以本实验 prefix 开头,不把列举命令替换为 purge/delete。

官方与中文核对 ​

英文主来源:RabbitMQ 4.2 确认、死信、Python 教程、Pika。中文交叉核对:阿里云死信说明。中文云服务与上游的策略、限额可能不同,因此不将云产品说明当作上游承诺;固定镜像的历史结果仅支持当时条件,本轮未重跑;正文独立解释协议机制,不照抄教程。

后续先读 资源模型,使用 Python CLI 前完成 项目依赖。随后可用 python examples/rabbitmq/readiness.py 检查实际 AMQP 用户连接和 channel,同样应有界重试,预期输出 AMQP connection and channel ready;再按 发布与领取检查消息链路。复习题与分开答案见 练习。

本篇的机制与失败分支可按综合练习书面推演;提示与参考答案分开提供,无需执行示例。

继续阅读