Camel文件聚合问题

时间:2015-12-08 13:39:41

标签: apache-camel activemq

详细信息: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>

0 个答案:

没有答案