我在集群中的两个节点上部署了一个 spring 集成应用程序。他们使用入站文件适配器轮询单个目录上的传入文件。 我有以下配置。
<file:inbound-channel-adapter id="inboundAdapter" channel="in" directory="file:${in.folder}" queue-size="100000"
filter="incoimngCompositeFilter">
<int:poller id="fileInboudPoller" fixed-rate="${in.interval}" receive-timeout="${file.in.timeout}" time-unit="SECONDS"
max-messages-per-poll="${file.in.max.messages}" task-executor="taskExecutor" />
</file:inbound-channel-adapter>
<bean id="incoimngCompositeFilter" class="org.springframework.integration.file.filters.CompositeFileListFilter">
<constructor-arg>
<list>
<bean class="org.springframework.integration.file.filters.FileSystemPersistentAcceptOnceFileListFilter">
<constructor-arg name="store" ref="redisMetaDataStore" />
<constructor-arg name="prefix" value="test"/>
</bean>
<bean class="org.springframework.integration.file.filters.RegexPatternFileListFilter">
<constructor-arg value="(?i)^(?!.*writing).*$" />
</bean>
</list>
</constructor-arg></bean><bean name="redisMetaDataStore" class="org.springframework.integration.redis.metadata.RedisMetadataStore">
<constructor-arg name="connectionFactory" ref="redisConnectionFactory" </bean><bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="port" value="6379" />
</bean>
我得到间歇性的结果。有时它处理时没有任何问题,但有时一个实例正在尝试处理其他实例已处理的文件。 有人可以向我指出使用 FileSystemPersistentAcceptOnceFileListFilter 和 RedisMetadataStore 的示例吗?
最佳答案
您如何创建文件?一旦写入,它们会自动移动吗?
如果您就地编写它们,则可能两个适配器都会看到该文件,因为时间戳已更改。
如果文件不在商店中,或者 lastModified
日期已更改,过滤器只会通过该文件。
关于spring - 集群中的文件夹轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30964878/