Skip to content

RabbitMQ 废弃功能说明

概述

本文档记录 RabbitMQ 已废弃和已移除的功能,帮助开发者了解版本变化并进行迁移。

废弃功能分类

状态说明
Deprecated已废弃,计划移除,建议迁移
Removed已移除,不再支持

RabbitMQ 4.0 废弃/移除功能

已移除功能

功能替代方案说明
Mirrored QueuesQuorum Queues镜像队列完全移除
MnesiaKhepri元数据存储替换
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 = khepri

RabbitMQ 3.13 废弃功能

已废弃功能

功能替代方案计划移除版本
rabbitmq_management_visualiser第三方工具4.0
旧版 MQTT 插件配置新配置格式4.0

RabbitMQ 3.12 废弃功能

已废弃功能

功能替代方案说明
Mirrored QueuesQuorum Queues强烈建议迁移
rabbitmq_top 插件管理界面内置功能已集成

RabbitMQ 3.11 废弃功能

已废弃功能

功能替代方案说明
rabbitmq_shovel_management 旧 API新 APIAPI 更新

RabbitMQ 3.10 废弃功能

已废弃功能

功能替代方案说明
rabbitmq_auth_backend_amqpHTTP 认证AMQP 认证后端废弃

迁移方案

ini
# 旧配置
# auth_backends.1 = amqp

# 新配置
auth_backends.1 = http
auth_http.http_method = post
auth_http.user_path = http://auth-server/auth/user

RabbitMQ 3.9 废弃功能

已废弃功能

功能替代方案说明
rabbitmq_auth_backend_cache 内置缓存外部缓存认证缓存机制变更

RabbitMQ 3.8 废弃功能

已废弃功能

功能替代方案说明
集群分区自动处理 pause_minorityautoheal分区处理策略更新

配置迁移

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 QueueQuorum 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_queue

Classic Queue → Stream

特性Classic QueueStream
消费模式删除已消费消息保留所有消息
重放不支持支持
吞吐量中等
存储成本

迁移步骤

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_visualiser3.13第三方可视化工具
rabbitmq_auth_backend_amqp3.10HTTP 认证后端
rabbitmq_auth_backend_dummy3.6-
rabbitmq_clusterer3.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/topic

API 迁移

已废弃 API 端点

端点废弃版本替代方案
/api/whoami3.7/api/whoami (新格式)
/api/aliveness-test3.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}

注意事项

  1. 版本规划: 提前规划迁移,避免版本升级时出现问题
  2. 测试验证: 迁移前在测试环境充分验证
  3. 数据备份: 迁移前备份重要数据
  4. 渐进迁移: 分批迁移,降低风险

相关链接