文件入站通道适配器性能问题

时间:2013-11-18 17:40:52

标签: spring spring-integration spring-rabbit

我们有一个spring集成应用程序,它将监视传入的文件夹,然后处理文件。 当应用程序因维护或其他原因而关闭时,上游应用程序将传入的文件夹填充100K文件。 当重新启动应用程序时,它正在冻结它不处理传入的文件可能正在尝试加载所有传入的文件。

这是配置

<file:inbound-channel-adapter id="inFiles" channel="inFilesin" directory="file:${incoming.folder}" 
    queue-size="300" filename-regex="(?i)^(?!.*writing) " 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)

建议将fixed-rate更改为fixed-delay

您的文件处理速度非常慢,第一个选项是新任务应该在该时间之后启动(在您的情况下为1秒)。

另一个问题 - rejection-policy="CALLER_RUNS"。在这种情况下,如果您的thead队列将耗尽(并且在您的情况下是100K文件),则计划的线程将完成实际工作。 Poller用于安排任务,使用大小 10 ThreadPoolTaskScheduler。因此,通过这种“havy-load”,您的应用可能会被冻结,因为所有应用都会共享

因此,请尝试使用fixed-delay。在这种情况下,您的应用程序不会被冻结,但文件将被处理得更慢。

也许这可以帮到你:<int:resource-inbound-channel-adapter>