【问题标题】:Faster way to process xml in mule在 mule 中处理 xml 的更快方法
【发布时间】:2014-08-08 14:12:27
【问题描述】:

我们有一个非常庞大的 xml 请求,其中包含近 10000 个 xml 元素,如下所示

<root>
   <message></message>
   <message></message>
   <message></message>
         .....
         .....
         .....
         .....
   <message></message>
   <message></message>
   <message></message>
</root>

在 mule 中,我们在 for-each 处理器中使用 xpath 提取器,这会花费大量时间。

有没有一种方法可以让我们在 mule 中更快地处理巨大的 xml 文件?

    <foreach doc:name="Foreach" batchSize="1" collection="#[xpath://message]">
        <!-- stuff -->
    </foreach>

更改 batchSize 也无济于事。
有没有其他的处理方式让它更快?

【问题讨论】:

  • 我认为拆分 xml 应该不会花费太多时间。它是您的处理 需要时间来处理 10,000 次。所以尝试使用 Collection Splitter 和 COllection Aggregator 的 FORK-JOIN 模式。这样处理 将在多个线程中发生,并且处理整个 10,000 个项目需要更少的时间。
  • 抱歉提到了一些东西。在 for-each 中,我只做一个带有在线交换模式的 vm:outbound-endpoint。所以它不应该影响我猜的时间。
  • 你在使用 EE 吗?如果是,你看过mulesoft.org/documentation/display/current/… 吗?
  • 我错过了。会看的。谢谢。

标签: mule


【解决方案1】:

我们可以通过遵循 mule 中的一些最佳实践来实现这一目标

  1. 使用 sax 解析器而不是 DOM 来加载 xml

  2. 将文件分成块并并行处理这些块

  3. 如果您将数据存储在多个变量中,请不要存储 完整的xml可能会导致内存泄漏

  4. 在每个 mule 流结束时删除变量 如果没有必要

【讨论】:

  • "4. 删除变量" - 这不是自动完成的吗?您实际上是否必须手动删除变量以避免内存泄漏?我认为流变量实际上是未引用的,并且在不再需要它们时由 GC 释放....你真的必须手动删除它们吗?
猜你喜欢
  • 2011-01-14
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
相关资源
最近更新 更多