Apache camel readLock=更改时驼峰文件组件吞吐量

Apache camel readLock=更改时驼峰文件组件吞吐量,apache-camel,config,Apache Camel,Config,我正在使用ApacheCamel将文件从输入目录传输到messagebroker。这些文件是通过SFTP编写的。为了避免使用仍在传输中的不完整文件,我设置了readLock=changed和readLockCheckInterval=3000 例如,我的一个测试是这样的: <route> <from uri="file:inbox?readLock=changed&amp;readLockCheckInterval=3000"/>

我正在使用ApacheCamel将文件从输入目录传输到messagebroker。这些文件是通过SFTP编写的。为了避免使用仍在传输中的不完整文件,我设置了readLock=changed和readLockCheckInterval=3000

例如,我的一个测试是这样的:

    <route>
        <from uri="file:inbox?readLock=changed&amp;readLockCheckInterval=3000"/>
        <log message="copying ${file:name}"/>
        <to uri="file:outbox"/>
    </route>
将文件从收件箱移动到发件箱需要五分钟

我读过《骆驼行动》一书中关于并行处理的章节。但这些示例侧重于对单个已使用文件中的行进行并行处理。我找不到一种方法来并行化消费者本身

在我的用例中,每秒大约一个文件的吞吐量就可以了。我只是不喜欢被迫冒着数据不完整的风险来实现它。readLock=changed设置似乎是一种黑客行为,但我们不能告诉客户先复制再移动,因此似乎没有其他选择

面对网络延迟,我如何在不牺牲完整性的情况下提高吞吐量?

如果生产者比消费者更快,并且您想要跟上,则必须并行化文件消耗。您可以通过多次部署消费者来完成这一任务,所有用户都轮询同一文件夹。这样,您可以并行处理与使用者实例数量相同的文件

然而,分布式文件使用者有一个新的问题:他们中的多个可以尝试同时使用同一个文件

要解决这一问题,您需要使用确保同一文件不会在所有实例中被多次使用

要使用文件组件,我想您必须将readLock设置为幂等更改。这样,消费者应该等到文件不再更改,当多个消费者尝试读取文件时,只有第一个消费者获胜。跳过所有其他文件,因为文件在幂等存储库中已经已知。

我使用readLockMinAge=3s,吞吐量很好,而不是readLockCheckInterval=3000。这就是我的测试路线现在的样子:

    <route>
        <from uri="file:inbox?readLock=changed&amp;readLockMinAge=3s"/>
        <to uri="file:outbox"/>
    </route>

事实证明,在这种情况下,我不是唯一一个这样做的人,有一个解决这个问题的方法。我太不耐烦了,读到了已经解释过的地方。

有一张关于加速的JIRA罚单,去那里投票帮助优先处理罚单谢谢@burki。我曾多次考虑启动骆驼,但对于我的情况来说,这实在是太过分了。问题在于readLockCheckInterval引入的延迟。
    <route>
        <from uri="file:inbox?readLock=changed&amp;readLockMinAge=3s"/>
        <to uri="file:outbox"/>
    </route>