在apache camel中使用rabbitmq处理大文件/消息时减少内存使用

k0pti3hp  于 9个月前  发布在  Apache
关注(0)|答案(1)|浏览(82)

我使用curl作为二进制数据发送200-900 MB的大zip文件到camel。这对restlet来说很好,但是当我从restlet到rabbitmq处理数据时,内存使用量会增加。
我试着把.注解到(rabbitmq.),然后问题就消失了。当我启用.to(rabbitmq...)端点时,内存使用量就会增加。我试着禁用rabbitmq消费者,但这并没有改变事情。
问题似乎是.to(rabbitmq.)导致内存使用量上升。我发现它在内部使用了一个byte[],但是转换到InputStream并没有做任何事情。Rabbitmq在内部使用byte[],但当发送到队列时,它不会释放内存。
我已经尝试了流缓存,也转换身体到一个输入流,但问题仍然存在。
现在我需要大量的内存,有时必须增加堆空间顶部约4GB的900 MB的Zip文件

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

kcugc4gi1#

使用像S3,FTP等对象存储来存储您的zip文件,并且只通过RabbitMQ将URL传递到文件。

相关问题