群集中的文件夹轮询

时间:2015-06-21 13:11:22

标签: spring redis spring-integration

我在群集中的两个节点上部署了一个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指向我的样本吗?

1 个答案:

答案 0 :(得分:0)

你是如何创建文件的?一旦写完就会原子地移动吗?

如果您在原地编写它们,则两个适配器都可能会看到该文件,因为时间戳已更改。

如果文件不在商店中,或者lastModified日期已更改,则过滤器只会传递该文件。