我在群集中的两个节点上部署了一个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指向我的样本吗?
答案 0 :(得分:0)
你是如何创建文件的?一旦写完就会原子地移动吗?
如果您在原地编写它们,则两个适配器都可能会看到该文件,因为时间戳已更改。
如果文件不在商店中,或者lastModified
日期已更改,则过滤器只会传递该文件。