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

问题描述 投票:0回答:1

我使用curl 作为二进制数据向camel 发送200-900 MB 的大型zip 文件。这对restlet来说很好,但是当我处理从restlet到rabbitmq的数据时,内存使用量会上升。

我尝试注释掉 .to(rabbitmq...) 然后问题就消失了。当我启用 .to(rabbitmq...) 端点时,内存使用量就会增加。我尝试禁用rabbitmq消费者,但这并没有改变什么。

问题似乎是 .to(rabbitmq...) 导致内存使用增加。我发现它在内部使用 byte[] 但转换为 InputStream 没有执行任何操作。 Rabbitmq 内部使用 byte[],但是当发送到队列后它不会释放内存。

我尝试过流缓存并将正文转换为输入流,但问题仍然存在。

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

.to(ExchangePattern.InOnly,"rabbitmq://localhost/myQueue?connectionFactory=#myConnectionFactory&durable=true&queue=myQueue&autoDelete=false&autoAck=false&queueArgsConfigurer=#myQueueArgs")
memory rabbitmq apache-camel
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.