我有一个文件: route camel component,它使用一个带有completionFromBatchConsumer的aggregationStrategy作为停止条件。
我的聚合器实现了CompletionAwareAggregationStrategy
路由本身运行良好。
我目前正在尝试定义一个readLock=changed策略来跳过正在由另一个进程写入的文件,这也很好用。
问题是,当文件由于readLock而被跳过时,批处理大小似乎没有更新,因此聚合器的onCompletion方法永远不会被调用,从而导致路由失效。
在计算批量大小之前,camel不应该检查readLock吗?有没有办法实现这一点或任何等效的解决方案?
TKS
发布于 2012-10-29 19:35:06
啊,你遇到了一个警告。读锁定是在运行时应用的,并且不是急于应用的。因此批量消费者可能会看到有10个文件,但读锁目前只能应用于9个文件。如果存在读锁定超时,则会跳过该文件。如果你没有超时,那么读锁最终将被授予,并且所有10个文件都可以被处理。
我不确定是否有什么简单的事情可以做,因为完成细节可能会相应地更新,但最后一个文件可能是读锁问题。然后你就不会有扳机了。
我们可以添加一个特性,在未授予读锁的情况下发出一个空交换。然后,您需要意识到这一点,并在您的自定义聚合策略中处理此问题。
https://stackoverflow.com/questions/13048107
复制相似问题