我有一个批处理作业,我用apache camel实现了。 我不想要一个长时间运行的过程,而是一个纯粹的批处理作业。
目前作为路由的最后一步,我调用了一个执行System.exit()的处理器,并在默认的5分钟超时后关闭了驼峰。
<route id="dataFetch">
<from uri="direct:dataFetch"/>
<split>
<simple>${body}</simple>
<to uri="bean:dataFetchProcessor"/>
<to uri="direct:dataPersist"/>
</split>
<to uri="bean:stopAndExitProcessor"/>
<stop/>
</route>
这个解决方案适合我,但感觉不确定。 有任何建议如何正确地做到这一点?
答案 0 :(得分:0)
我更倾向于使用CamelContext.stop()
方法。
以下是如何在处理器中执行此操作的示例:
@Override
public void process(Exchange exchange) throws Exception {
exchange.getContext().stop();
}
以这种方式停止上下文将允许完成正在进行的消息。如果您的路线仍然消耗并且阻止关闭,您可能需要先停止路线(例如,通过controlbus
)。