详细信息:Apache ActiveMQ 5.9.1,Apache Camel 2.15
我有一个调用批处理进程的Camel路由,然后该批处理ID被送入此路由,见下文,并使用多播进行拆分。然后每个foo(N)路由执行一些SQL并将其编组为CSV。然后将路由的聚合馈送到文件聚合器中,该聚合器将文件压缩。
到目前为止,我发现了什么; Camel 2.13不支持在标头中使用camel文件名,因此我升级到2.15。如果我取出所有可能返回空结果集的foo(N)路由,则该过程正常,但这不是一个选项。如果我打印每个foo(N)路由的内容,我会得到一个要生成的文件列表,即使是内容为零的文件。
那么......这让我离开了什么地方?卡住! 有人可以解释我所缺少的东西,或者我没有正确看到的东西吗?
这是我的Camel Route定义。
<route>
<from uri="{{foo.cron.trigger.uri}}"/>
<setHeader headerName="unique-foo-Id">
<ognl>new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(request.headers.scheduledFireTime)</ognl>
</setHeader>
<multicast parallelProcessing="true" stopOnException="true">
<to uri="direct:foo1"/>
<to uri="direct:foo2"/>
<to uri="direct:foo3"/>
<to uri="direct:foo4"/>
</multicast>
</route>
<!-- each foo(N) route looks similar with different SQL -->
<route>
<from uri="direct:foo1"/>
<setHeader headerName="CamelFileName">
<constant>foo1.csv</constant>
</setHeader>
<to uri="sql:{{my.foo1.sql}}"/>
<marshal>
<csv/>
</marshal>
<to uri="direct:foo-aggregate-files"/>
</route>
<route>
<from uri="direct:foo-aggregate-files" />
<aggregate strategyRef="fileAggregatorStrategy" strategyMethodAllowNull="true" completionSize="4" forceCompletionOnStop="true">
<correlationExpression>
<simple>header.unique-foo-Id</simple>
</correlationExpression>
<setHeader headerName="CamelFileName">
<constant>fooOutbound.zip</constant>
</setHeader>
<to uri="file:{{foo.output.folder}}"/>
</aggregate>
</route>