apache-camel - Apache Camel 解压、处理和聚合未完成
问题描述
我正在尝试处理一个 zip 文件,其中包含几个文件(都很小,所以在内存中工作不是问题),需要再次转换和压缩在一起。
我设法解压缩,转换文件,但由于某种原因,拆分器没有完成,只使用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>
知道可能是什么问题吗?
解决方案
Camel Splitter 提供了一个内置的聚合器,这使得将拆分的消息聚合回单个传出消息变得更加容易
您必须在拆分定义中定义聚合策略
<split strategyRef="zipAggregationStrategy">
还没有在 XML 中尝试过,但在 Java DSL 中,这是我的示例之一。
.unmarshal(zipFile)
.split(bodyAs(Iterator.class),new ZipAggregationStrategy(true,true))
.streaming()
.stopOnException()
.to("direct:transform-ticket")
.end();
推荐阅读
- java - 在 Android 中使用 AsynkTaskLoader 从 Cloud Firestore 检索数据
- python - pandas - 在多列上分组后的最高计数项目
- python - python中的对象如何找到它的可用方法?
- javascript - 如何使用 javascript 触发关键事件?
- python-3.x - Tkinter Trace Method returns 3 variables when 0 are expected
- java - Android首次设置警告变成错误
- django - 如何为具有外键的模型定义序列化程序(不指向 pk 字段,而是指向唯一字段)?
- angular - API URL 的 Angular 6 环境也传递客户端 URL
- java - 地图片段直接将相机移动到当前位置
- java - 资源:0 在做什么?