Camel文件:处理所有文件时停止路由

时间:2017-04-14 14:12:34

标签: java apache-camel

我有骆驼路线

<routes xmlns="http://camel.apache.org/schema/spring">
   <route startupOrder="1">
    <from uri="file:D:\Work\eclipse_workspace\dataEngine_GIT_2\src\data" />
      <unmarshal>
        <csv delimiter="|" quoteDisabled="true" />
    </unmarshal>
    <to uri="bean:csvProcessor?method=processNew" />
</route>

</routes>

它不断轮询目录。

如果此作业被触发一次,我想停止轮询。

如果处理完所有文件,则路由应该停止

我该怎么做?

我在下面试过

<from uri="timer:foo?repeatCount=1" />
            <pollEnrich>
                <constant>file:D:\Work\eclipse_workspace\dataEngine_GIT_2\src\data</constant>
            </pollEnrich>

但它仍在继续进行民意调查

注意:我使用的是Spring Camel。

2 个答案:

答案 0 :(得分:4)

您可以订阅OnCompletion回调(在交换完成时调用)。您可以使用Control Bus EIP停止路线。

示例:

<route startupOrder="1" id="myRoute">
    <from uri="file:D:\Work\eclipse_workspace\dataEngine_GIT_2\src\data" />
    <onCompletion>
        <to uri="controlbus:route?routeId=myRoute&amp;action=stop"/>
    </onCompletion>
    <unmarshal>
        <csv delimiter="|" quoteDisabled="true" />
    </unmarshal>
    <to uri="bean:csvProcessor?method=processNew" />
</route>

答案 1 :(得分:0)

CamelBatchComplete交换属性可用于知道轮询是否完成,然后可以使用getContext().stopRoute()

停止路由