首页 > 解决方案 > Apache Camel 如何获取输入的 xml 有效负载大小?

问题描述

有没有办法我们可以在交换正文中获取输入有效负载大小。如果内容大小超过 50 MB,我想 Gzip 内容。

标签: javaapache-cameljbossfuse

解决方案


有点迂回,但我使用骆驼缓存流。设置好后,只需检查 body 是否已转换为 StreamCache。(允许多次读取的流。在处理非常大的文件时主要有用)。我必须处理 10gb+ 的文件,所以这是一个很好的方法,不会因为内存不足而烧毁 jvm,而且也不用担心读取它会丢失有效负载。

蓝图(不确定 jboss 等价物是什么)想要

<!-- define a bean of type StreamCachingStrategy which CamelContext will automaticly use -->
<bean id="streamStrategy" class="org.apache.camel.impl.DefaultStreamCachingStrategy">
    <property name="spoolDirectory" value="${java.io.tmpdir}/camelcache/#uuid#/"/>
    <property name="spoolThreshold" value="52428800"/>
    <property name="spoolUsedHeapMemoryThreshold" value="70"/>
    <property name="anySpoolRules" value="true"/>
</bean>

<camelContext streamCache="true" xmlns="http://camel.apache.org/schema/blueprint">

您可以创建一个Predicate bean 来进行实际测试,并在骆驼路由中使用它来影响流控制。

如果你不担心内存,你可能会发疯,在你的谓词中,将有效负载作为流,将所有字节作为字节[]读入内存,然后测试字节[]的大小(或从流中读取字节数)。取决于您的有效负载源,如果您不先缓存它,您可能无法重置流。


推荐阅读