0

我有一个文件:路由骆驼组件,它使用一个以completionFromBatchConsumer 作为停止条件的aggregationStrategy。

我的聚合器实现了 CompletionAwareAggregationStrategy

路线本身运行良好。

我目前正在尝试定义一个 readLock=changed 策略来跳过另一个进程正在写入的文件,这也很好。

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

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

TKS

4

1 回答 1

1

啊,你有一个警告。读锁是即时应用的,而不是急切地应用。所以批量消费者可能会看到有10个文件,但目前只能对9个文件申请读锁。如果您有读锁定超时,则该文件将被跳过。如果您没有超时,那么最终将授予读锁并且可以处理所有 10 个文件。

我不确定是否可以做一些简单的事情,因为完成细节可以相应地更新,但最后一个文件可能是读锁问题。然后你就没有触发器了。

我们可以添加一个功能,在未授予读锁时发出空交换。然后你需要意识到这一点,并在你的自定义聚合策略中处理这个问题。

于 2012-10-29T11:35:05.587 回答