Lecture02-RabbitMQ-Ubuntu安装与操作清单

文章目录

    [toc]

    单词词性音标含义
    dockern./ˈdɒkə(r)/容器(把应用及其依赖打包运行)
    managementn./ˈmænɪdʒmənt/管理(这里指 RabbitMQ 的管理控制台)
    exchangen./ɪksˈtʃeɪndʒ/交换机(消息到达的第一站)
    durableadj./ˈdjʊərəbl/持久化的(重启不丢失)
    bindingn./ˈbaɪndɪŋ/绑定(交换机与队列的对应关系)
    routing keyn./ˈruːtɪŋ kiː/路由键(交换机按它把消息送进队列)

    Lecture02-RabbitMQ-Ubuntu安装与操作清单

    环境:Ubuntu 22.04(64 位) 目标:更新 apt 源 → 安装 Docker → 用 Docker 跑起 RabbitMQ 4 → 通过 Management UI 建交换机/队列并发消息 全程命令逐步执行,每步都有验证,照着做即可。 提示:国内网络下,第 1、2 步可选的"国内镜像加速"能大幅提速,建议优先配置。


    1、Ubuntu 系统更新 apt 源

    ① 刷新软件源索引 + 升级系统软件

    sudo apt update          # 刷新软件包索引(拿到最新软件列表)
    sudo apt upgrade -y      # 升级所有可升级的软件包(可选,建议做一次)
    

    ② 安装基础工具(后续会用到)

    sudo apt install -y curl vim apt-transport-https ca-certificates software-properties-common
    

    验证:执行 apt update 时能看到 Reading package lists... Done 且无红色报错;curl --version 能输出版本号。

    可选:切换国内 apt 镜像源(网络慢时)——以清华源为例(先备份):

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g; s/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
    sudo apt update
    

    (也可用阿里源:把 mirrors.tuna.tsinghua.edu.cn 换成 mirrors.aliyun.com)


    2、Ubuntu 系统安装 Docker

    官方推荐用 Docker CE(docker-ce),这里按官方 apt 仓库方式安装。

    ① 添加 Docker GPG 密钥和仓库(国内必走阿里云镜像)

    # 1) 添加 Docker GPG key(走阿里云镜像)
    curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | \
      sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
    # 2) 添加 Docker apt 仓库(同样走阿里云镜像)
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    

    ⚠️ 国内网络不要用官方源:download.docker.com 在国内经常 TLS 握手被重置,报错 OpenSSL SSL_connect: 连接被对方重置 + gpg: 找不到有效的 OpenPGP 数据。上面命令已换成阿里云镜像;也可换清华 mirrors.tuna.tsinghua.edu.cn/docker-ce。

    ② 安装 Docker

    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    

    ③ 启动并设置开机自启

    sudo systemctl start docker
    sudo systemctl enable docker
    sudo docker --version      # 能看到 Docker version 20.x / 24.x / 2x.x 即成功
    sudo docker run hello-world   # 拉取并运行测试镜像,打印 Hello from Docker! 即正常
    

    ④ 让当前用户免 sudo 使用 docker(可选,推荐)

    sudo usermod -aG docker $USER
    # 退出重新登录(或执行 newgrp docker)后生效
    newgrp docker
    docker ps      # 不带 sudo 能执行即成功
    

    可选:配置 Docker 国内镜像加速器(拉镜像快):

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<'EOF'
    {
      "registry-mirrors": ["https://docker.m.daocloud.io", "https://dockerproxy.com"]
    }
    EOF
    sudo systemctl restart docker
    

    拉取镜像前建议先配置,否则 rabbitmq:4.3-management 可能很慢或超时。


    3、基于 Docker 安装 RabbitMQ 4.3

    官方镜像 rabbitmq,用 4.3-management 这个 tag——它自带管理控制台插件,正好满足第 4 步用 UI 操作。

    ① 拉取并启动 RabbitMQ 4.3(含 Management UI,并创建远程用户)

    docker run -d \
      --name rabbitmq \
      --hostname rabbitmq \
      -p 5672:5672 \
      -p 15672:15672 \
      -e RABBITMQ_DEFAULT_USER=admin \
      -e RABBITMQ_DEFAULT_PASS=admin123 \
      rabbitmq:4.3-management
    
    • RABBITMQ_DEFAULT_USER / RABBITMQ_DEFAULT_PASS:创建容器时就指定默认用户,该用户自动带 administrator 权限,且可从任意机器远程登录(不受 guest 只能 localhost 的限制)。
    • 注意:设了这两个变量后,内置的 guest 用户会被删除——所以登录时用你设的 admin(而不是 guest)。
    • 密码可自行改(示例用 admin123)。
    端口用途
    5672客户端(AMQP 协议)连接端口
    15672Management UI(网页管理台)

    ② 验证启动

    docker ps                 # 看到 rabbitmq 容器状态为 Up
    docker logs rabbitmq      # 无报错、出现 "Server startup complete" 即成功
    docker exec -it rabbitmq rabbitmqctl list_users   # 应看到 admin,且没有 guest
    

    ③ (可选)常用管理命令

    docker restart rabbitmq   # 重启容器
    docker stop rabbitmq      # 停止
    docker start rabbitmq     # 启动
    docker rm -f rabbitmq     # 删除容器(数据也会清空)
    

    说明:已通过 RABBITMQ_DEFAULT_USER / RABBITMQ_DEFAULT_PASS 创建了远程用户,第 4 步直接用 admin 登录即可,无需再手动建用户。


    4、通过 Management UI 创建交换机、队列并发送消息

    ① 打开管理控制台

    • 浏览器访问:http://localhost:15672(本机);远程则 http://服务器IP:15672
    • 账号:admin 密码:admin123(即第 3 步 RABBITMQ_DEFAULT_USER / PASS 设的值)

    ② 创建一个交换机(Exchange)

    1. 顶部导航点 Exchanges and Queues → 切到 Exchanges 标签
    2. 在 Add a new exchange 区域填:
      • Name:demo.exchange
      • Type:direct
      • Durability:Durable(持久化)
      • 其他保持默认
    3. 点 Add exchange 按钮,下方列表出现 demo.exchange 即成功

    ③ 创建一个队列(Queue)

    1. 切到 Queues 标签
    2. 在 Add a new queue 区域填:
      • Name:demo.queue
      • Durability:Durable
      • 其他保持默认
    3. 点 Add queue,下方出现 demo.queue 即成功

    ④ 把队列绑定到交换机(设置路由关系)

    1. 点上方队列 demo.queue 进入该队列详情页
    2. 往下找到 Bindings 区域
    3. 在 Add binding from this queue 填:
      • From exchange:demo.exchange
      • Routing key:demo.routing
      • 点 Bind
    4. 绑定的 Exchange 和 Routing key 出现在列表即成功

    一句话理解绑定关系:消息发到 demo.exchange、带路由键 demo.routing,就会进入绑定了这个键的 demo.queue。

    ⑤ 通过交换机发送一条消息

    1. 顶部导航切到 Exchanges 标签,点 demo.exchange 进入详情
    2. 往下找到 Publish message 区域
    3. 填:
      • Routing key:demo.routing(与上面的绑定键一致)
      • Payload:随便填,如 Hello RabbitMQ 4 !
      • Properties → Message TTL:可留空
    4. 点 Publish message,页面提示消息已发送

    ⑥ 验证消息进入队列并被取出

    1. 切到 Queues 标签,点 demo.queue 进入
    2. 在 Get messages 区域:
      • Ack Mode:Automatic ack(取出即确认)
      • 点 Get Message(s)
    3. 下方 Message 区域能看到刚才那条 Hello RabbitMQ 4 !——说明"发 → 路由 → 入队"全链路通了 ✅

    5、常用速查

    操作命令 / 地址
    查看容器状态docker ps
    看 RabbitMQ 启动日志docker logs rabbitmq
    管理控制台地址http://localhost:15672(admin / 你设的密码)
    客户端连接端口5672(如 SpringBoot 的 spring.rabbitmq.host=localhost、port=5672)

    说明:远程登录用户已在第 3 步创建容器时通过 RABBITMQ_DEFAULT_USER / PASS 指定(admin),无需再手动建用户,直接 http://服务器IP:15672 用 admin 登录即可。 若之后需要临时加更多用户,可用 rabbitmqctl:

    docker exec -it rabbitmq rabbitmqctl add_user 新用户 密码
    docker exec -it rabbitmq rabbitmqctl set_user_tags 新用户 administrator
    docker exec -it rabbitmq rabbitmqctl set_permissions -p / 新用户 ".*" ".*" ".*"
    

    6、本节验证

    • 会更新 apt 源并安装 Docker ✅
    • 会用 Docker 启动 RabbitMQ 4.3(含远程用户、端口映射)✅
    • 会通过 Management UI 创建交换机、队列并绑定 ✅
    • 会通过交换机发送消息并验证入队 ✅
    end