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