我有一个文件:route camel component,它使用aggregationStrategy和completionFromBatchConsumer作为停止条件。
我的聚合器实现了CompletionAwareAggregationStrategy
路线本身运作良好。
我目前正在尝试定义一个readLock =已更改的策略来跳过正在由另一个进程写入的文件,这也可以正常工作。
问题是,当由于readLock而跳过文件时,似乎批量大小没有更新,因此聚合器的onCompletion方法永远不会被调用,从而导致死路径。
在计算批量大小之前,不应该检查readLock吗?有没有办法实现这个或任何等效的解决方案?
TKS
答案 0 :(得分:1)
啊,你发现了一个警告。读锁定是动态应用的,而不是急切的。因此批处理使用者可能会看到有10个文件,但读锁定目前只能应用于9个文件。如果您有读锁定超时,则跳过该文件。如果你没有超时,那么最终将授予读锁,并且可以处理所有10个文件。
我不确定是否可以轻松完成,因为完成细节可以相应更新,但最后一个文件可能是读锁定问题。然后你就不会有触发器。
我们可以添加一个功能,在未授予读锁定的情况下发出空交换。然后您需要了解这一点,并在自定义聚合策略中处理此问题。