导出元数据
bash
# 导出用户、vhost、权限、交换机、队列等配置
rabbitmqctl export_definitions /tmp/rabbitmq_definitions.json
导入元数据
bash
# 目标端导入元数据
rabbitmqctl import_definitions /tmp/rabbitmq_definitions.json
bash
root@rabbitmq-test-0:/restore# rabbitmqctl import_definitions /restore/restore-mq.json
Importing definitions in JSON from a file at "/restore/restore-mq.json" ...
Successfully started definition import. This process is asynchronous and can take some time.
export-mq.json 文件逻辑解析
export-mq.json 是一个 RabbitMQ 消息队列系统的配置导出文件。
1. 整体结构
该文件是一个标准的 JSON 配置文件,主要包含以下几大部分:
- bindings: 定义交换机与队列之间的绑定关系
- queues: 定义所有消息队列及其属性配置
- exchanges: 定义所有消息交换机及其属性配置
- users: 定义用户权限配置(从部分内容可推断)
- policies: 定义策略配置(当前为空数组)
2. 多租户隔离
系统采用多个虚拟主机(vhost)进行租户隔离:
每个虚拟主机拥有独立的交换机、队列和权限设置,实现了业务模块的隔离。
3. 消息路由架构
交换机类型
- topic交换机 :最常用,支持模式匹配路由键,如
dlx,taskComplete,processDel,statusChange,message - direct交换机 :基于精确匹配,如
remind交换机
队列特性
- 所有队列均设置为
durable: true(持久化),确保消息不丢失 - 所有队列均设置为
auto_delete: false,不会自动删除 - 大部分队列配置了
x-message-ttl: 60000(消息1分钟过期) - 所有队列都关联了死信交换机
x-dead-letter-exchange: "dlx"
绑定关系
- 交换机通过路由键(routing_key)将消息路由到特定队列
- 使用
#通配符表示匹配所有消息 - 使用特定键名(如
pending,timeout,todo,assignee)进行精确路由
4. 死信处理机制
系统实现了完整的死信处理流程:
- 每个虚拟主机都定义了专用的死信交换机
dlx(topic类型) - 每个业务队列都配置了
x-dead-letter-exchange: "dlx" - 死信交换机通过
routing_key: "#"将所有死信消息路由到dlq队列 - 这种设计确保了过期或处理失败的消息不会丢失,便于后续处理和问题排查