减少在Apache骆驼中使用RabbitMQ处理大型文件/消息时的内存使用

时间:2019-05-09 14:33:34

标签: memory rabbitmq apache-camel

我正在使用curl作为二进制数据将200-900 MB的大型zip文件发送到骆驼。这对restlet很好,但是当我处理从restlet到Rabbitmq的数据时,内存使用率上升。

我尝试注释掉.to(rabbitmq ...),然后问题消失了。当我启用.to(rabbitmq ...)端点时,内存使用量上升。我试图禁用rabbitmq使用者,但并没有改变。

似乎问题是.to(rabbitmq ...)导致内存使用量增加。我发现它在内部使用了byte [],但转换为InputStream并没有做任何事情。 Rabbitmq内部使用byte [],但发送到队列完成后不会释放内存。

我尝试了流缓存并将主体转换为InputStream,但是问题仍然存在。

目前,我需要大量内存,有时必须为900MB Zip文件增加大约4GB的堆空间

.to(ExchangePattern.InOnly,"rabbitmq://localhost/myQueue?connectionFactory=#myConnectionFactory&durable=true&queue=myQueue&autoDelete=false&autoAck=false&queueArgsConfigurer=#myQueueArgs")

1 个答案:

答案 0 :(得分:0)

使用对象存储(例如S3,FTP等)存储zip文件,并且仅通过RabbitMQ将URL传递给文件。


注意: RabbitMQ团队监视rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。