【发布时间】:2018-05-24 01:25:10
【问题描述】:
有没有办法我们可以在交换体中获取输入负载大小。如果内容大小超过 50 MB,我想 Gzip 内容。
【问题讨论】:
标签: java apache-camel jbossfuse
有没有办法我们可以在交换体中获取输入负载大小。如果内容大小超过 50 MB,我想 Gzip 内容。
【问题讨论】:
标签: java apache-camel jbossfuse
有点迂回,但我用骆驼cache streaming。设置好后,只需检查 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 来进行实际测试,并在骆驼路由中使用它来影响流控制。
如果你不担心内存,你可能会发疯,在你的谓词中,将payload作为流,将所有字节作为byte[]读入内存,然后测试byte[的大小] (或从流中读取字节数)。取决于您的负载源,如果您不先缓存它,您可能无法重置流。
【讨论】: