memory - 在 apache camel 中使用 rabbitmq 处理大文件/消息时减少内存使用
问题描述
我使用 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")
解决方案
使用 S3、FTP 等对象存储存储您的 zip 文件,并且仅通过 RabbitMQ 将 URL 传递给文件。
注意: RabbitMQ 团队会监控rabbitmq-users
邮件列表,有时只会在 StackOverflow 上回答问题。
推荐阅读
- android - 从 [object Promise] 获取数据?
- android - 如何从 Android 依赖项中排除 Android-x
- android - 是否可以使用 Koin 进行动态依赖注入
- python-3.x - 我想为我的自定义类使用 argparse/sys
- tensorflow - Tensorboard 图孤层
- oracle - 通过 Oracle 中的函数更改表并添加具有默认值的新列
- opencart - 已安装的扩展未显示扩展管理器打开购物车
- java - 如何在 Android 中使用 SQLite 从微调器中根据选定的月份和年份从列中获取值?
- google-cloud-storage - Cloud Dataproc 无法访问 Cloud Storage 存储分区
- php - 电子邮件表单正在刷新页面