首页 > 解决方案 > 有没有办法限制文件处理程序实例的数量?

问题描述

我有一个组件,它使用 spring 框架文件集成在每次文件到达某个位置时启动一个进程。我可以从日志文件中看到两个线程/进程/实例正在运行。有没有办法将其限制为一个?

第二个进程/线程似乎在第一个进程/线程之后几乎立即启动,并且它们相互干扰。第一个实例处理文件,但随后第二个实例尝试执行相同操作并遇到 filenotfound 异常,因为第一个实例移动了它。

标签: springspring-integration

解决方案


首先,您需要考虑为文件入站通道适配器配置轮询器,fixedDelay而不是fixedRate. 这样,下一个轮询任务将在前一个轮询结束之前开始。

还要考虑使用一些filter不再处理同一个文件。不确定您的用例是什么,但简单AcceptOnceFileListFilter就足够了。为方便起见,通道适配器上有一个prevent-duplicates选项。

在参考手册中查看更多信息:https ://docs.spring.io/spring-integration/docs/current/reference/html/#files

还有关于轮询行为:https ://docs.spring.io/spring-integration/docs/current/reference/html/#channel-adapter-namespace-inbound


推荐阅读