file inbound adapter多个线程处理相同的文件

时间:2013-11-20 18:33:37

标签: spring integration spring-integration spring-rabbit

我们有一个spring集成应用程序,它将监视传入的文件夹,然后处理文件。我使用的是prevent-duplicates =“true”,但我必须改为false。 我在这里解释了原因。 file inbound-channel-adapter performance issue

现在我看到多个线程正在处理同一个文件。我感谢你的帮助!

<file:inbound-channel-adapter id="inFiles" channel="inFilesin" directory="file:${incoming.folder}" 
    queue-size="300" filename-regex="(?i)^(?!.*writing)" prevent-duplicates="false" auto-startup="true" auto-create-directory="false" >
        <int:poller id="fw.fileInboudPoller" fixed-rate="1" receive-timeout="3" time-unit="SECONDS"
            max-messages-per-poll="10" task-executor="taskExecutor" />
</file:inbound-channel-adapter>

<task:executor id="taskExecutor" pool-size="10-20" queue-capacity="20" rejection-policy="CALLER_RUNS" />

谢谢, 莫汉

1 个答案:

答案 0 :(得分:0)

正如您所发现的,当文件系统包含大量文件时,缩放很困难。

您可能想要考虑替代技术,Rabbit,JMS等。

或者,您可以将自定义文件锁定器或目录扫描程序实现为described here

提供的nio-locker无济于事,因为在这种情况下它不会阻止多线程访问。