Apache camel Apache Camel解压、处理和聚合未完成
我试图处理一个zip文件,其中包含几个文件(都很小,所以在内存中工作不是问题),需要再次转换和压缩 我成功地解压、转换了文件,但由于某种原因,拆分器没有完成,只是使用Apache camel Apache Camel解压、处理和聚合未完成,apache-camel,Apache Camel,我试图处理一个zip文件,其中包含几个文件(都很小,所以在内存中工作不是问题),需要再次转换和压缩 我成功地解压、转换了文件,但由于某种原因,拆分器没有完成,只是使用completionTimeout使聚合器创建最终的zip存档 以下是路线: <route id="ZipFile"> <from uri="file:{{file.path.in}}?move=.done&moveFailed=.error&readLock=rename"
completionTimeout
使聚合器创建最终的zip存档
以下是路线:
<route id="ZipFile">
<from uri="file:{{file.path.in}}?move=.done&moveFailed=.error&readLock=rename"/>
<setProperty propertyName="OriginalZipName">
<simple>${header.CamelFileName}</simple>
</setProperty>
<unmarshal>
<zipFile usingIterator="true"/>
</unmarshal>
<split streaming="true">
<simple>${body}</simple>
<log message="************ CamelSplitComplete = ${property.CamelSplitComplete}"/>
<to uri="direct:ProcessUnzippedFile"/>
<setHeader headerName="CamelFileName">
<simple>${property.OriginalZipName}</simple>
</setHeader>
<!-- Aggregate to zip -->
<aggregate strategyRef="zipAggregationStrategy" eagerCheckCompletion="true">
<correlationExpression>
<constant>true</constant>
</correlationExpression>
<completionPredicate>
<simple>${property.CamelSplitComplete}</simple>
</completionPredicate>
<setHeader headerName="CamelFileName">
<simple>${property.OriginalZipName}</simple>
</setHeader>
<to uri="file://{{file.path.out}}"/>
</aggregate>
</split>
</route>
${header.CamelFileName}
${body}
${property.OriginalZipName}
真的
${property.CamelSplitComplete}
${property.OriginalZipName}
你知道问题出在哪里吗?驼峰拆分器提供了一个内置的聚合器,这使它更容易进行聚合 将拆分邮件聚合回单个传出邮件 您必须在拆分定义中定义聚合策略
<split strategyRef="zipAggregationStrategy">
嗯,分手后你会得到什么?一个zip,只需要一个??是的,实际上我在我的案例中将zip返回到一个http post请求。我测试了它,但有一点我不能正确地得到它。。。输出zip中的文件使用exchange id命名,而不是原始文件名。知道ZipAggregationStrategy是否可以使用CamelFileName吗?哦,没关系,我忘了将参数传递给ZipAggregationStrategy!成功了!令人惊叹的!
.unmarshal(zipFile)
.split(bodyAs(Iterator.class),new ZipAggregationStrategy(true,true))
.streaming()
.stopOnException()
.to("direct:transform-ticket")
.end();