0

我们有一个 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" />

感谢你的帮助。

谢谢,莫汉

4

1 回答 1

0

建议更改fixed-ratefixed-delay.

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

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

所以,尝试使用fixed-delay. 在这种情况下,您的应用程序不会被冻结,但文件的处理速度会变慢。

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

于 2013-11-18T18:33:05.813 回答