gpt4 book ai didi

multithreading - Spring集成文件轮询。如果移动文件,是否需要使用AcceptOnceFileListFilter?

转载 作者:行者123 更新时间:2023-12-03 12:55:34 24 4
gpt4 key购买 nike

我正在编写文件轮询实现,并试图确定是否需要使用AcceptOnceFileListFilter。
FileProcessor将执行的第一步是将文件移动到另一个目录。

轮询时,轮询程序“batchFilePoller”是否使用多个线程?是否会在多个线程读取文件的情况下发生争用情况?在这种情况下,我假设我需要使用AcceptOnceFileListFilter。

但是,如果轮询器仅使用池中的一个线程。
然后,如果文件在下一个轮询时间之前被移动并且成功,那么我认为该文件没有被处理两次的可能性了吗?

<int-file:inbound-channel-adapter id="batchFileInAdapter" directory="/somefolder" auto-create-directory="true" auto-startup="false" channel="batchFileInChannel" >
<int:poller id="batchFilePoller" fixed-rate="6000" task-executor="batchTaskExecutor" max-messages-per-poll="1" error-channel="batchPollingErrorChannel" />
</int-file:inbound-channel-adapter>

<int:channel id="batchFileInChannel"/>

<int:service-activator input-channel="batchFileInChannel" >
<bean class="com.foo.FileProcessor" />
</int:service-activator>

<task:executor id="batchTaskExecutor" pool-size="5" queue-capacity="20"/>

最佳答案

<int-file:inbound-channel-adapter>具有prevent-duplicates选项,默认情况下为true,这是您的情况,因为您没有提供其他阻止prevent-duplicates成为true的选项。

是的:如果使用fixed-rate,则任何轮询适配器都是多线程的。在这种情况下,新的轮询任务可以在上一个任务完成之前运行。

即使它是单线程的(使用fixed-delay),AcceptOnceFileListFilter也必须存在,因为新的轮询任务不知道文件是否已处理。并且它再次读取相同的文件。
AcceptOnceFileListFilter适用于您不希望再次读取同一文件的情况。您可以使用<int:transactional synchronization-factory=""/>代替<poller><int-file:inbound-channel-adapter>来克服这一问题:

<int:transaction-synchronization-factory id="txSyncFactory">
<int:after-commit expression="payload.delete()"/>
</int:transaction-synchronization-factory>

PseudoTransactionManager

您可以在《 Spring Integration引用手册》中找到更多信息。

关于multithreading - Spring集成文件轮询。如果移动文件,是否需要使用AcceptOnceFileListFilter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28320154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com