2015-06-21 88 views
1

我在集羣中的兩個節點上部署了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

你是如何創建文件的?一旦寫入,它們是原子移動的嗎?

如果您正在就地編寫它們,則可能兩個適配器都會看到該文件,因爲時間戳已更改。

過濾器只會在文件不存在時才傳遞該文件,或者日期已更改爲lastModified