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

标签 spring spring-integration enterprise-integration

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

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

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

最佳答案

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

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

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

关于spring - 入站文件适配器 + 集群环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25454060/

相关文章:

spring - 使用 Spring Integration DSL 进行中流文件采购

Python 企业集成模式库/框架

java - Spring @Autowired EntityManager 失败

java - Json 未在 spring 集成中转换为对象

Spring YAML 配置文件配置

java - Spring AMQP 集成 - 消费者手册确认

c# - 用于流数据的 CQRS

java - 在 Apache Camel 中,如果端点不存在,我如何收到错误?

javascript - AngularJS 按钮提交不起作用

java - 尽管存在 @Bean,@Autowired RabbitTemplate 仍为 null