0

我们有一个骆驼路线,它查看一个文件并处理该文件上可能有数百条记录,几乎就像一个批处理例程(但骆驼中只有一条消息)。因此,消息可能需要几分钟或几小时才能完成。一旦此消息(以及任何其他等待的消息)完成,我们希望关闭队列。

我们有以下几点需要考虑:

关闭策略定义了在强制关闭之前等待路由停止的时间

<bean id="shutdown" class="org.apache.camel.impl.DefaultShutdownStrategy"> 
 <property name="timeout" value="#[bpf.defaultShutdownStrategy.timeout]"/>
</bean>

该路由有一个参数 shutdownRunningTask="CompleteAllTask​​s" 应该等到所有消息都处理完毕。

不确定哪个会占主导地位,因为一旦超时是不正常的,它将强制关闭,对于我们的场景,我们很可能会超过超时,因为我们无法预测处理需要多长时间。

有什么想法/考虑吗?提前致谢。

4

1 回答 1

1

您应该查看onCompletion功能。当 Exchange 完成时,它会在单独的线程中添加一条新路由。

以下是 Camel 文档中的一些示例:

Java DSL

// define a global on completion that is invoked when the exchange is complete
onCompletion().to("log:global").to("mock:sync");

from("direct:start")
    .process(new MyProcessor())
    .to("mock:result");

XML DSL

<!-- this is a global onCompletion route that is invoke when any exchange is complete
     as a kind of after callback -->
<onCompletion>
    <to uri="log:global"/>
    <to uri="mock:sync"/>
</onCompletion>

<route>
    <from uri="direct:start"/>
    <process ref="myProcessor"/>
    <to uri="mock:result"/>
</route>

然后,这里是有关如何在 Camel中停止路线的文档。

于 2013-11-05T21:30:44.397 回答