更新时间:2025-06-20 GMT+08:00
分享

约束与限制

本章节介绍华为云分布式消息服务RabbitMQ版产品功能的约束和限制,您在使用RabbitMQ实例时注意不要超过相应的约束和限制,以免程序出现异常。

如果因为您的实例配置超过相应的约束和限制而导致的任何不稳定情况,不在SLA承诺和赔偿范围内。

实例

表1 实例约束与限制

限制项

约束和限制

版本

当前服务端版本为3.8.35、3.12.13和AMQP-0-9-1。

连接数

RabbitMQ单机和集群实例,不同实例规格的连接数上限不一致,具体限制,请参考产品规格

通道数

单条连接可以建立的通道数如下:

  • RabbitMQ 3.x.x版本:<= 2047
  • RabbitMQ AMQP-0-9-1版本:<= 2000

内存高水位阈值

<= 40%

内存使用率超过40%可能会触发内存高水位,内存高水位会导致生产者流程被阻塞。

仅RabbitMQ 3.x.x版本存在内存高水位限制。

磁盘高水位阈值

>= 5GB

磁盘剩余空间低于5GB会触发磁盘高水位,生产者流程被阻塞。

仅RabbitMQ 3.x.x版本存在磁盘高水位限制。

cluster_partition_handling

pause_minority

当集群发生网络分区时,代理会检查自己是否处于“少数派”(存储分区的代理数小于等于总代理数的一半称为少数派)。少数派中的代理将会自动关闭服务并定期检测网络状态,待分区恢复之后重新启动服务。如果未开启镜像队列,发生分区时少数派上的队列将无法生产消费。

此策略相当于放弃了可用性而选择了数据一致性。

RabbitMQ插件

RabbitMQ插件功能可用于测试和迁移业务等场景,不建议用于生产业务。因使用插件导致的可靠性问题,不在服务承诺的SLA范围内。

仅RabbitMQ 3.x.x版本支持插件功能。

修改VPC/子网/可用区

实例创建后,不支持修改VPC/子网/可用区。

存储空间

  • 只支持扩大存储空间,不支持减小存储空间。
  • 扩容存储空间有次数限制,只能扩容20次。

代理数量

  • 集群实例只支持增加代理数量,不支持减少代理数量。
  • 增加代理数量过程中会有秒级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。
  • 单机实例不支持修改代理数量。

仅RabbitMQ 3.x.x版本支持修改代理数量。

代理规格

  • RabbitMQ 3.x.x版本支持扩容/缩容代理规格,RabbitMQ AMQP-0-9-1版本仅支持扩容代理规格。
  • RabbitMQ AMQP-0-9-1版本单机实例和集群实例在变更规格过程中会有秒级连接闪断,客户端需要支持自动重连,建议在业务低峰时进行变更。
  • RabbitMQ 3.x.x版本单机实例在变更规格过程中,节点会重启,造成分钟级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。
  • RabbitMQ 3.x.x版本没有配置镜像/仲裁队列的集群实例在变更规格过程中,节点会逐个重启,造成分钟级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。
  • RabbitMQ 3.x.x版本配置了镜像/仲裁队列的集群实例在变更规格过程中,节点会逐个重启,造成秒级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。
  • RabbitMQ 3.x.x版本集群实例在变更规格过程中,变更中的节点连接会切换至其余节点,导致其余节点存在过载风险(比如超过连接数、内存高水位等),建议您在实例规格范围内使用,具体实例规格请参考产品规格
  • Exchange、Queue和消息需要配置持久化,否则节点重启后,消息可能丢失。

是否支持ping命令

  • 单机实例:内网连接地址和公网连接地址都支持ping命令。
  • 集群实例:内网连接地址支持ping命令,公网连接地址不支持ping命令。

Vhost

表2 Vhost约束与限制

限制项

约束和限制

删除Vhost

创建实例时创建的默认Vhost,不支持删除。

Vhost名称

  • RabbitMQ 3.x.x版本实例的Vhost名称以特殊字符开头,例如点号“.”,可能会导致监控数据无法显示。Vhost名称包含特殊字符,例如“%”、“|”、“/”,会导致Vhost名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Vhost名称为Vhost.1%1|2_3/,此时监控中显示的Vhost名为“Vhost.1_1_2_3_”。
  • RabbitMQ AMQP-0-9-1版本实例的Vhost名称包含特殊字符,例如“%”、“|”、“/”、“.”,会导致Vhost名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Vhost名称为Vhost.1%1|2_3/,此时监控中显示的Vhost名为“Vhost_1_1_2_3_”。

Exchange

表3 Exchange约束与限制

限制项

约束和限制

默认Exchange

RabbitMQ 3.x.x版本在创建Vhost后会创建7个默认Exchange:(AMQP default)、amq.direct、amq.fanout、amq.headers、amq.match、amq.rabbitmq.trace、amq.topic。

绑定Exchange

  • RabbitMQ 3.x.x版本中,名为“(AMQP default)”的Exchange不能绑定任何Exchange。
  • “Internal”为“是”的Exchange只能绑定Exchange,不能绑定Queue。
  • RabbitMQ AMQP-0-9-1版本的Exchange不支持绑定Exchange,只支持绑定Queue。

删除Exchange

RabbitMQ 3.x.x版本中,默认Exchange不支持删除。

Exchange名称

RabbitMQ AMQP-0-9-1版本实例的Exchange名称包含特殊字符,例如“%”、“|”、“/”、“.”,会导致Exchange名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Exchange名称为Exchange.1%1|2_3/,此时监控中显示的Exchange名为“Exchange_1_1_2_3_”。

Queue

表4 Queue约束与限制

限制项

约束和限制

绑定Queue

  • RabbitMQ 3.x.x版本中,名为“(AMQP default)”的Exchange不能绑定任何Queue。
  • “Internal”为“是”的Exchange只能绑定Exchange,不能绑定Queue。

惰性队列

RabbitMQ 3.8.35及以上版本支持惰性队列。

仲裁队列

RabbitMQ 3.8.35及以上版本支持仲裁队列。

单一活跃消费者

RabbitMQ 3.8.35及以上版本支持单一活跃消费者特性。

Queue名称

  • RabbitMQ 3.x.x版本实例的Queue名称以特殊字符开头,例如点号“.”,可能会导致监控数据无法显示。Queue名称包含特殊字符,例如“%”、“|”、“/”,会导致Queue名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Queue名称为Queue.1%1|2_3/,此时监控中显示的Queue名为“Queue.1_1_2_3_”。
  • RabbitMQ AMQP-0-9-1版本实例的Queue名称包含特殊字符,例如“%”、“|”、“/”、“.”,会导致Queue名称与监控页面不一致,在监控页面中特殊字符会以“_”显示。例如:Queue名称为Queue.1%1|2_3/,此时监控中显示的Queue名为“Queue_1_1_2_3_”。

消息

表5 消息约束与限制

限制项

约束和限制

消息大小

RabbitMQ 3.x.x版本单条消息的最大长度为50MB,RabbitMQ AMQP-0-9-1版本单条消息的最大长度为4MB。

服务端限制了单条消息的最大长度,请勿发送大于此长度的消息,否则生产失败。

相关文档