更新时间:2025-09-03 GMT+08:00

RabbitMQ扩容/缩容会影响业务吗?

扩容/缩容RabbitMQ实例的影响如表1所示。

表1 变更实例规格的影响

变更配置类型

影响

代理数量

  • 扩容代理数量过程中会重启RabbitMQ的负载均衡进程,导致节点主备倒换,造成秒级业务中断,客户端需要支持自动重连,建议在业务低峰时进行变更。
  • 变更时长和新增代理数量有关,单个代理的变更时长一般在5~10分钟,总变更时长为(5~10分钟)*新增代理数量

存储空间

  • 扩容存储空间不会影响业务
  • 扩容存储空间有次数限制,每个实例只能扩容20次
  • 可用存储空间=实际存储空间-用于存储日志的存储空间-格式化磁盘的损耗。例如,实际扩容存储空间到700GB,用于存储日志的数据的存储空间为100GB,格式化磁盘损耗7GB,那么扩容后的可用存储空间为593GB。
  • 预计总变更时长为5分钟内

代理规格

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

以下示例演示在Java客户端设置消息重试。

ConnectionFactory connectionFactory = new ConnectionFactory();
//设置服务地址
connectionFactory.setHost("localhost");
//设定端口
connectionFactory.setPort(5672);
//自动重试:
connectionFactory.setAutomaticRecoveryEnabled(true);
connectionFactory.setNetworkRecoveryInterval(5);
connectionFactory.setTopologyRecoveryEnabled(true);