RabbitMQ 大文件传输测试

测试环境说明:

  RabbitMQ 版本:3.7.21    Erlang: 22.1.8

  服务器硬件配置:4核16G

 

大于4M以上文件准备: 

5M  500个

8M 3500个

48M  100个

测试数据总大小:35G

 

 发送队列初始化:

创建3个目录分别存放备份数据、异常数据、源数据

发布策略1:1秒并发10个文件

发布策略2:1秒并发30个文件

发布策略3:1秒并发50个文件

 

整体待发布--文件数剩余一半时,切换策略2

切换到策略2,相当于增加并发

文件正常读取、发送。

切换到策略5,一秒50个文件

 

服务中断。

 

过程中MQ远程服务所在服务器负载情况:

任务启动前:

 

 

任务运行中:

 

 服务器运行过程中除了并发增大,自身服务中断一次的情况,后续再次增加并发,未复现中断异常。

 

 测试结论:

1. rabbitmq 单条消息最大支持支持2G,因此支持大于4M的文件传输。

2. 并发请求增大,传输文件过大的时候,会出现远程MQ服务中断异常,这时也会导致消费者(我们的业务处理端出现异常)。

3. 并发量不大的业务场景,可以传输4M以上文件,发送前不做文件大小校验处理,并发量大的情况下,不建议用队列传输发送超过4M以上文件。

 

补充:

1. 消息大小限制

在版本3.7中的源码,可以看到最大消息大小为2GB。
274 %% Trying to send a term across a cluster larger than 2^31 bytes will 
275 %% cause the VM to exit with "Absurdly large distribution output data 
276 %% buffer". So we limit the max message size to 2^31 - 10^6 bytes (1MB 
277 %% to allow plenty of leeway for the #basic_message{} and #content{} 
278 %% wrapping the message body). 
279 -define(MAX_MSG_SIZE, 2147383648). 

参考:https://github.com/rabbitmq/rabbitmq-common/blob/v3.7.15/include/rabbit.hrl

在版本3.8开始是512MiB
232 %% Max message size is hard limited to 512 MiB. 
233 %% If user configures a greater rabbit.max_message_size, 
234 %% this value is used instead. 
235 -define(MAX_MSG_SIZE, 536870912). 

 

参考:https://github.com/rabbitmq/rabbitmq-common/blob/master/include/rabbit.hrl

RabbitMQ消息大小限制,队列长度限制

posted @ 2022-06-10 16:31  hello-Jesson  阅读(2546)  评论(3编辑  收藏  举报