Appearance
RabbitMQ 废弃功能说明
概述
本文档记录 RabbitMQ 已废弃和已移除的功能,帮助开发者了解版本变化并进行迁移。
废弃功能分类
| 状态 | 说明 |
|---|---|
| Deprecated | 已废弃,计划移除,建议迁移 |
| Removed | 已移除,不再支持 |
RabbitMQ 4.0 废弃/移除功能
已移除功能
| 功能 | 替代方案 | 说明 |
|---|---|---|
| Mirrored Queues | Quorum Queues | 镜像队列完全移除 |
| Mnesia | Khepri | 元数据存储替换 |
| rabbitmq_trust_store 插件 | - | 信任存储插件移除 |
| rabbitmq_management_visualiser 插件 | - | 可视化插件移除 |
镜像队列迁移
废弃说明:
- 镜像队列(Classic Mirrored Queues)在 4.0 完全移除
- 推荐使用 Quorum Queues 替代
迁移方案:
bash
# 1. 查看现有镜像队列策略
rabbitmqctl list_policies
# 2. 删除镜像策略
rabbitmqctl clear_policy ha-all
# 3. 创建 Quorum Queue 替代
# 应用层需要重新声明队列类型java
// Java 客户端迁移示例
// 旧代码 - 镜像队列
// Map<String, Object> args = new HashMap<>();
// args.put("x-ha-policy", "all");
// 新代码 - Quorum Queue
Map<String, Object> args = new HashMap<>();
args.put("x-queue-type", "quorum");
channel.queueDeclare("my_queue", true, false, false, args);Mnesia 迁移
废弃说明:
- Mnesia 数据库在 4.0 被 Khepri 替代
- 元数据存储方式变更
迁移方案:
ini
# rabbitmq.conf
# 启用 Khepri
metadata_store = khepriRabbitMQ 3.13 废弃功能
已废弃功能
| 功能 | 替代方案 | 计划移除版本 |
|---|---|---|
| rabbitmq_management_visualiser | 第三方工具 | 4.0 |
| 旧版 MQTT 插件配置 | 新配置格式 | 4.0 |
RabbitMQ 3.12 废弃功能
已废弃功能
| 功能 | 替代方案 | 说明 |
|---|---|---|
| Mirrored Queues | Quorum Queues | 强烈建议迁移 |
| rabbitmq_top 插件 | 管理界面内置 | 功能已集成 |
RabbitMQ 3.11 废弃功能
已废弃功能
| 功能 | 替代方案 | 说明 |
|---|---|---|
| rabbitmq_shovel_management 旧 API | 新 API | API 更新 |
RabbitMQ 3.10 废弃功能
已废弃功能
| 功能 | 替代方案 | 说明 |
|---|---|---|
| rabbitmq_auth_backend_amqp | HTTP 认证 | AMQP 认证后端废弃 |
迁移方案:
ini
# 旧配置
# auth_backends.1 = amqp
# 新配置
auth_backends.1 = http
auth_http.http_method = post
auth_http.user_path = http://auth-server/auth/userRabbitMQ 3.9 废弃功能
已废弃功能
| 功能 | 替代方案 | 说明 |
|---|---|---|
| rabbitmq_auth_backend_cache 内置缓存 | 外部缓存 | 认证缓存机制变更 |
RabbitMQ 3.8 废弃功能
已废弃功能
| 功能 | 替代方案 | 说明 |
|---|---|---|
| 集群分区自动处理 pause_minority | autoheal | 分区处理策略更新 |
配置迁移:
ini
# 旧配置
# cluster_partition_handling = pause_minority
# 新配置
cluster_partition_handling = autoheal早期版本废弃功能
RabbitMQ 3.7
| 功能 | 替代方案 | 说明 |
|---|---|---|
| advanced.config 格式 | rabbitmq.conf | 推荐使用新配置格式 |
| rabbitmq_clusterer 插件 | 内置集群发现 | 集群发现机制更新 |
RabbitMQ 3.6
| 功能 | 替代方案 | 说明 |
|---|---|---|
| rabbitmq_auth_backend_dummy | - | 测试用认证后端移除 |
RabbitMQ 3.5
| 功能 | 替代方案 | 说明 |
|---|---|---|
| rabbitmq_auth_ldap 旧配置 | 新配置格式 | LDAP 配置更新 |
配置格式迁移
advanced.config → rabbitmq.conf
旧格式 (advanced.config):
erlang
[
{rabbit, [
{tcp_listeners, [5672]},
{ssl_listeners, [5671]},
{vm_memory_high_watermark, 0.4}
]}
].新格式 (rabbitmq.conf):
ini
listeners.tcp.default = 5672
listeners.ssl.default = 5671
vm_memory_high_watermark.relative = 0.4队列类型迁移
Classic Queue → Quorum Queue
| 特性 | Classic Queue | Quorum Queue |
|---|---|---|
| 持久化 | 可选 | 强制 |
| 副本数 | 配置策略 | 固定奇数 |
| 性能 | 高吞吐 | 中等吞吐 |
| 数据安全 | 一般 | 高 |
迁移步骤:
bash
# 1. 创建新的 Quorum Queue
# 应用层声明 x-queue-type=quorum
# 2. 使用 Shovel 迁移数据
rabbitmqctl set_parameter shovel migrate-shovel \
'{"src-protocol":"amqp091","src-uri":"amqp://","src-queue":"old_classic_queue",\
"dest-protocol":"amqp091","dest-uri":"amqp://","dest-queue":"new_quorum_queue"}'
# 3. 切换生产者消费者到新队列
# 4. 删除旧队列
rabbitmqctl delete_queue old_classic_queueClassic Queue → Stream
| 特性 | Classic Queue | Stream |
|---|---|---|
| 消费模式 | 删除已消费消息 | 保留所有消息 |
| 重放 | 不支持 | 支持 |
| 吞吐量 | 中等 | 高 |
| 存储成本 | 低 | 高 |
迁移步骤:
java
// 创建 Stream
Map<String, Object> args = new HashMap<>();
args.put("x-queue-type", "stream");
args.put("x-max-length-bytes", 100_000_000_000L);
channel.queueDeclare("events_stream", true, false, false, args);
// 消费者使用 offset
Map<String, Object> consumerArgs = new HashMap<>();
consumerArgs.put("x-stream-offset", "last"); // 或具体 offset插件迁移
已废弃插件列表
| 插件 | 废弃版本 | 替代方案 |
|---|---|---|
| rabbitmq_management_visualiser | 3.13 | 第三方可视化工具 |
| rabbitmq_auth_backend_amqp | 3.10 | HTTP 认证后端 |
| rabbitmq_auth_backend_dummy | 3.6 | - |
| rabbitmq_clusterer | 3.7 | 内置集群发现 |
插件迁移示例
rabbitmq_auth_backend_amqp → rabbitmq_auth_backend_http:
ini
# 旧配置 (AMQP 认证)
# auth_backends.1 = amqp
# 新配置 (HTTP 认证)
auth_backends.1 = http
auth_http.http_method = post
auth_http.user_path = http://auth-server:8080/auth/user
auth_http.vhost_path = http://auth-server:8080/auth/vhost
auth_http.resource_path = http://auth-server:8080/auth/resource
auth_http.topic_path = http://auth-server:8080/auth/topicAPI 迁移
已废弃 API 端点
| 端点 | 废弃版本 | 替代方案 |
|---|---|---|
| /api/whoami | 3.7 | /api/whoami (新格式) |
| /api/aliveness-test | 3.8 | /api/health/checks/aliveness-test |
API 响应变化
旧响应格式:
json
{
"msg": "ok"
}新响应格式:
json
{
"status": "ok",
"message": "Aliveness test passed"
}迁移检查清单
镜像队列迁移
- [ ] 识别所有镜像队列
- [ ] 评估 Quorum Queue 兼容性
- [ ] 创建新的 Quorum Queue
- [ ] 迁移数据
- [ ] 切换应用配置
- [ ] 删除旧队列和策略
配置格式迁移
- [ ] 识别 advanced.config 配置项
- [ ] 转换为 rabbitmq.conf 格式
- [ ] 测试新配置
- [ ] 部署新配置
插件迁移
- [ ] 检查已废弃插件
- [ ] 安装替代插件
- [ ] 迁移配置
- [ ] 验证功能
使用示例
检查废弃功能使用
bash
# 检查镜像队列策略
rabbitmqctl list_policies | grep ha-mode
# 检查队列类型
rabbitmqctl list_queues name type
# 检查插件
rabbitmq-plugins list -e | grep -E "auth_backend_amqp|clusterer"自动化迁移脚本
bash
#!/bin/bash
# 镜像队列迁移脚本
OLD_QUEUE="classic_queue"
NEW_QUEUE="quorum_queue"
VHOST="%2f"
# 创建 Shovel 迁移数据
rabbitmqctl set_parameter shovel migrate_${OLD_QUEUE} \
"{\"src-protocol\":\"amqp091\",\"src-uri\":\"amqp://guest:guest@localhost/${VHOST}\",\"src-queue\":\"${OLD_QUEUE}\",\"dest-protocol\":\"amqp091\",\"dest-uri\":\"amqp://guest:guest@localhost/${VHOST}\",\"dest-queue\":\"${NEW_QUEUE}\"}"
# 等待迁移完成
echo "Waiting for migration to complete..."
sleep 60
# 检查新队列消息数
rabbitmqctl list_queues name messages | grep ${NEW_QUEUE}注意事项
- 版本规划: 提前规划迁移,避免版本升级时出现问题
- 测试验证: 迁移前在测试环境充分验证
- 数据备份: 迁移前备份重要数据
- 渐进迁移: 分批迁移,降低风险
