我的骆驼路线配置如下(伪代码)
from(direct:in).to(jdbc:db).split().body().streaming().parallelProcessing()
.process(doSomething).process(createDBquery).out(jdbc:db)
jdbc端点配置为推出JdbcOutputType.StreamList
。通过将选择查询发送到direct:in来触发路由。 db中的每一行都在doSomething
中处理。它创建一个特殊的结果对象,将其转换为查询以将结果写入db。
我的主要问题是如何检测db的完整结果是否得到处理 - 我想知道它何时完成。
我尝试使用EventNotifier并在ExchangeCompletedEvent
上过滤。但是对于写入db的每个结果,似乎都会引发此事件。现在我正在考虑使用RoutePolicy
/覆盖“onExchangeDone”,但这会改变什么吗?
两者的确切语义是什么?特别是对于在途中创建新交换(例如通过拆分)的路由? 他们是一个干净的方式来检测我的路线何时完成?
答案 0 :(得分:0)
我有一个answer from Claus itself in camel user group。 在这里使用RoutePolicy更好,因为它只在原始Exchange上调用onExchangeDone。 通过使用该事件,我们必须从split中过滤掉交换。这可以通过检查属性'Exchange.CORRELATION_ID'的存在来完成。
其他可行的解决方案是使用'.onCompletion()'或以这种方式工作的同步:
from("direct:confirm")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
exchange.getUnitOfWork()
.addSynchronization(new FileRollback());
}
})