docker安装rabbitmq

一、准备工作
下载镜像

//management是带web界面
docker pull rabbitmq:4.3.1-management

创建目录

mkdir -p /data/rabbitmq/{data,conf,log}
//设置权限
chmod -R 777 /data/rabbitmq

二、docker运行mq
(1)运行指令

docker run -d \
  -p 5672:5672 \
  -p 15672:15672 \
  --restart=always \
  -e RABBITMQ_DEFAULT_VHOST=my_vhost \
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=admin123456 \
  --hostname myRabbit \
  --name rabbitmq \
  -v /data/rabbitmq/data:/var/lib/rabbitmq \
  -v /data/rabbitmq/log:/var/log/rabbitmq \
  -v /data/rabbitmq/conf:/etc/rabbitmq/ \
  rabbitmq:4-management

//启用web
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_management

-d 后台运行容器(detach mode),容器会在后台运行,不会占用当前终端
-p 5674:5672 将宿主机的 5672 端口映射到容器的 5672 端口(AMQP 服务端口,客户端连接使用)
-p 15673:15672 15672 端口映射到容器的 15672 端口(管理后台 Web 端口)
–restart=always 重启策略:容器退出时总是自动重启
-e RABBITMQ_DEFAULT_VHOST=my_vhost 环境变量:设置默认虚拟主机(vhost)名称为 my_vhost
-e RABBITMQ_DEFAULT_USER=admin 设置默认管理员用户名为 admin
-e RABBITMQ_DEFAULT_PASS=admin123456 设置默认管理员密码
–hostname myRabbit 容器主机名:设置容器内部的主机名为 myRabbit(RabbitMQ 的数据与主机名绑定,一旦设置不要随意更改)
–name rabbitmq-new 容器名称:给容器命名为 rabbitmq-new,方便后续管理
-v /data/rabbitmq/data:/var/lib/rabbitmq 数据卷挂载:将宿主机的 /data/rabbitmq/data 目录挂载到容器的 /var/lib/rabbitmq(数据存储目录,必须挂载)
-v /data/rabbitmq/log:/var/log/rabbitmq 数据卷挂载:将宿主机的 /data/rabbitmq/log 目录挂载到容器的 /var/log/rabbitmq(日志存储目录)
-v /data/rabbitmq/conf:/etc/rabbitmq/ 数据卷挂载:将宿主机的 /data/rabbitmq/conf 目录挂载到容器的 /etc/rabbitmq/(配置文件目录)
(2)测试
浏览器访问http://ip:15672,可以登录进入mq就成功了
三、使用docker compose运行mq
(1)创建配置文件

mkdir -p /compose/rabbitmq
touch /compose/rabbitmq/compose.yaml

在 /compose/rabbitmq/composr.yaml中添加配置

version: '3.8'

services:
  rabbitmq:
    image: rabbitmq:4-management
    container_name: rabbitmq
    restart: always
    hostname: myRabbit
    ports:
      - "5672:5672"      # AMQP 服务端口
      - "15672:15672"    # 管理后台端口
    environment:
      - RABBITMQ_DEFAULT_VHOST=my_vhost
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin123456
    volumes:
      - /data/rabbitmq/data:/var/lib/rabbitmq
      - /data/rabbitmq/log:/var/log/rabbitmq
      - /data/rabbitmq/conf:/etc/rabbitmq/

运行

//进入目录
cd /compose/rabbitmq
//运行
docker compose up -d
//运行web插件
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_management

(2)测试
浏览器访问http://ip:15672,可以登录进入mq就成功了
四、基本使用
浏览器输入http://ip:15672/
在这里插入图片描述
一般使用就Exchanges (交换机)和Queues (队列)
(1)创建交换机
在这里插入图片描述
在这里插入图片描述
参数说明

  • Name(名称)
    作用:交换机的唯一标识符,后续发消息和绑定时都要用到。
    建议:用有业务含义的命名,比如 order.direct.exchange 或 user.topic.exchange,方便后期维护
  • Type(类型)
    Direct 消息的 Routing Key 必须完全匹配队列绑定的 Binding Key
    Topic 支持通配符匹配:*(匹配一个词)、#(匹配零或多个词)
    Fanout 忽略 Routing Key,广播给所有绑定的队列
    Headers 忽略 Routing Key,根据消息头(Headers)属性匹配
  • Durability(持久化)
    Durable:交换机本身会在RabbitMQ重启后保留
    Transient:重启后交换机消失,需要程序重新声明
  • Auto delete(自动删除)
    No(默认):不自动删除,永久保留
    Yes:当最后一个绑定的队列被解绑后,交换机自动删除
  • Internal(内部交换机)
    No(默认):普通交换机,应用程序可以直接发消息给它
    Yes:内部交换机,应用程序不能直接发消息给它,只能由其他交换机通过绑定转发过来
  • Arguments(参数)
    在 Arguments 里填入一个键:alternate-exchange,值:另一个交换机的名称
    当消息到达当前交换机,但无法路由到任何队列时,它不会被丢弃,而是被转发到这个备胎交换机处理

填写完成创建
在这里插入图片描述
(2)添加队列
在这里插入图片描述
在这里插入图片描述
参数

  • Type(类型)
    Default for virtual host 普通队列,消息按先进先出(FIFO)顺序存储和消费
    Quorum 基于 Raft 共识算法的高可用队列。数据在多个节点间同步复制,节点宕机后自动切换,消息零丢失
  • Virtual host(虚拟主机)
    不同VHost之间的交换机、队列、绑定完全隔离,互不可见。即使名字相同也不会冲突
  • Name(名称)
    队列的唯一标识符,后续交换机绑定、生产者发送、消费者接收都依赖它
  • Durability(持久化)
    Durable(持久化)队列的定义(名称、绑定关系、Arguments参数)会被保存在磁盘上,RabbitMQ重启后自动恢复。但队列里的消息是否保留,取决于消息本身是否标记为持久化
    Transient(临时)队列的定义只存在于内存中,RabbitMQ重启后队列消失
  • Arguments(参数)
    x-message-ttl 队列中所有消息的全局过期时间
    x-max-length 限制队列最大消息数量,超出后按策略丢弃头部消息
    x-max-length-bytes 限制队列最大占用空间,超出后丢弃头部消息
    x-dead-letter-exchange 指定死信交换机,被丢弃/过期/拒绝的消息转发到这里
    x-dead-letter-routing-key 死信消息转发时使用的路由键,不填则沿用原路由键
    x-single-active-consumer 是否只允许一个消费者消费,保证消息顺序
    在这里插入图片描述
    (3)配置关系
    在交换机界面点击创建的交换机
    在这里插入图片描述

参数

  • To queue(目标队列)
    定你要把当前交换机绑定到哪一个队列上
  • Routing key(路由键)
    这是绑定中最核心的参数,它决定了消息从交换机流向哪个队列的“匹配规则”
    Direct:必须完全相等才能匹配。
    Topic:支持通配符 *(匹配一个词)和 #(匹配零或多个词)。
    Fanout:忽略此值,因为广播给所有绑定的队列。
    Headers:忽略此值,改为匹配消息头属性。
  • Arguments(参数)
    仅用于 Headers 类型交换机。当消息头(Headers)有多个键值对时,all 要求全部匹配,any 要求至少一个匹配
    只有使用 Headers 类型交换机时才需要填,其他类型完全忽略

更多推荐