docker安装rabbitmq
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 类型交换机时才需要填,其他类型完全忽略
更多推荐
所有评论(0)