入站文件适配器+集群环境

时间:2014-08-22 19:14:40

标签: spring spring-integration enterprise-integration

我在群集中的两个节点上部署了一个spring集成应用程序。他们轮询单个目录(入站文件适配器)上的传入文件。如果某个节点拾取并处理了某个文件,则有时另一个节点会通过尝试获取相同的文件来抛出以下异常。

错误org.springframework.integration.handler.LoggingHandler - org.springframework.integration.MessageHandlingException:无法将消息有效负载写入文件.....导致:java.io.FileNotFoundException:/ somedir / dir / file。 txt(没有这样的文件或目录)

我知道轮询/聚类等已经在各地进行了很多讨论。确实在任何地方找到了准确的解释。我正在尝试清理它并保持日志更清洁。提前谢谢。入站文件适配器中是否有任何简单配置可以防止这种情况发生。

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用单个源轮询目录,并使用一些中间传输(例如RabbitMQ,JMS等)将工作分发给竞争消费者。

另一种方法是使用FileSystemPersistentAcceptOnceFileListFilter使用ConcurrentMetadataStore,因此只有一个实例会看到每个文件。

这需要一些共享状态 - 框架提供RedisMetadataStore作为内置选项。