使completionFromBatchConsumer()和readlock =在camel文件/ ftp中一起更改工作

时间:2012-10-24 11:15:02

标签: file ftp apache-camel aggregation

我有一个文件:route camel component,它使用aggregationStrategy和completionFromBatchConsumer作为停止条件。

我的聚合器实现了CompletionAwareAggregationStrategy

路线本身运作良好。

我目前正在尝试定义一个readLock =已更改的策略来跳过正在由另一个进程写入的文件,这也可以正常工作。

问题是,当由于readLock而跳过文件时,似乎批量大小没有更新,因此聚合器的onCompletion方法永远不会被调用,从而导致死路径。

在计算批量大小之前,不应该检查readLock吗?有没有办法实现这个或任何等效的解决方案?

TKS

1 个答案:

答案 0 :(得分:1)

啊,你发现了一个警告。读锁定是动态应用的,而不是急切的。因此批处理使用者可能会看到有10个文件,但读锁定目前只能应用于9个文件。如果您有读锁定超时,则跳过该文件。如果你没有超时,那么最终将授予读锁,并且可以处理所有10个文件。

我不确定是否可以轻松完成,因为完成细节可以相应更新,但最后一个文件可能是读锁定问题。然后你就不会有触发器。

我们可以添加一个功能,在未授予读锁定的情况下发出空交换。然后您需要了解这一点,并在自定义聚合策略中处理此问题。