【问题标题】:Reducing memory use when using rabbitmq in apache camel for large files/messages在 apache camel 中使用 rabbitmq 处理大文件/消息时减少内存使用
【发布时间】:2019-05-09 14:33:33
【问题描述】:

我正在使用 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")

【问题讨论】:

  • 我不认为像 rabbitmq 或其他消息代理真的适合存储 GB 大小的大型二进制数据。

标签: memory rabbitmq apache-camel


【解决方案1】:

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


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

【讨论】:

  • 我最终做到了。我将文件存储在磁盘上并将文件名传递给rabbit,然后根据rabbit中的内容轮询该文件。内存使用率现在非常低,运行顺利
猜你喜欢
  • 2019-10-21
  • 2011-09-22
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 2013-12-23
  • 2011-11-22
  • 1970-01-01
相关资源
最近更新 更多