当前位置: 首页 > 知识库问答 >
问题:

Spring Integration FTP文件适配器在多个实例上处理副本

凤凡
2023-03-14

我是Spring integration的新手,我正在尝试使用Spring integration FTP文件适配器从FTP位置读取文件进行POC。当我在两个Tomcat实例上部署应用程序时,我看到两个实例都在从FTP位置下载文件。

我正在使用虚拟FTP服务器(Xlight)运行在我的机器上。当我第一次将文件复制到远程目录时,两个实例都下载了文件,但当我再次将几个文件复制到远程文件夹时,两个实例都没有选择新添加的文件。当我的应用程序部署在多个实例上时,我还想实现的一个目标是确保一个文件只处理一次。

下面是我的配置文件:

<bean id="ftpSessionFactory" class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
  <property name="host" value="${ftp.host}"/>
    <property name="port" value="${ftp.port}"/>
    <property name="username" value="${ftp.username}"/>
    <property name="password" value="${ftp.password}"/>

    <!-- whether server should connect to client's port or client should connect server port for initiating file transfer -->
    <!--  <property name="clientMode" value="${ftp.clientMode}"/> -->
    <!-- different file types involve ASCII , EBCDIC , BINARY (default) -->
    <!--  <property name="fileType" value="${ftp.fileType}"/> --> 
    <!-- <property name="bufferSize" value="${ftp.bufferSize}"/> -->
</bean>

<int-ftp:inbound-channel-adapter id="ftpInbound" channel="ftpInboundChannel" session-factory="ftpSessionFactory" charset="UTF-8" auto-create-local-directory="true" delete-remote-files="false" remote-directory="/SpringFtpOutbound/remote" remote-file-separator="/" preserve-timestamp="false" temporary-file-suffix=".writing" local-filter="myFilter" local-directory="/work/SpringFtpInbound_2">
  <int:poller fixed-rate="2000" max-messages-per-poll="1"/>
</int-ftp:inbound-channel-adapter>

<bean id="myFilter" class="org.springframework.integration.file.filters.CompositeFileListFilter">
  <constructor-arg>
    <list>
      <bean class="org.springframework.integration.file.filters.FileSystemPersistentAcceptOnceFileListFilter">
        <constructor-arg name="store" ref="metadataStore"/>
        <constructor-arg value="*.*"/>
      </bean>
      <bean class="org.springframework.integration.file.filters.SimplePatternFileListFilter">
         <constructor-arg value="*.xml" />
      </bean>
    </list>
  </constructor-arg>
</bean> 

<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true" p:host-name="localhost" p:port="6379" />
  <bean name="metadataStore" class="org.springframework.integration.redis.metadata.RedisMetadataStore">
    <constructor-arg name="connectionFactory" ref="redisConnectionFactory"/>
</bean>

<int-file:file-to-string-transformer id="myFileToStringTransfromer" input-channel="ftpInboundChannel" output-channel="transformChannel" />

<int-xml:xpath-splitter id="ftpFileSplitter" input-channel="transformChannel" output-channel="xpathSplitterChannel">
  <int-xml:xpath-expression expression="/bancsRequest/input"/>
</int-xml:xpath-splitter>

<int:transformer id="myCustomTransformer" ref="myTransformerBean" input-channel="xpathSplitterChannel" method="transform" output-channel="ftpOutboundChannel">
</int:transformer>

<bean id="myTransformerBean" class="com.ntrs.geh.ftp.file.poc.transformer.MyXmlPayloadTransformer"/>

<int-jms:outbound-channel-adapter id="outboundChannelAdapter" channel="ftpOutboundChannel" jms-template="ftpOutQueueJmsTemplate" >
</int-jms:outbound-channel-adapter>

共有1个答案

伯鸿达
2023-03-14

使用相同的共享metadatastore方法,但对于过滤器。为此,框架提供ftppersistentacceptoncefilelistfilter:http://docs.spring.io/spring-integration/reference/html/ftp.html#ftp-inbound

 类似资料:
  • 我有一个开关声明,它检查提交的文本中是否存在特定的字符串。 通常,我会创建专用的文件来处理每个的POST数据。 但是如何在一个中处理多个POST。 对于每个ajax数据,我都包含了一个唯一的标识符,这将作为PHP接收到的ajax的参考 但我不确定如何正确地编写PHP代码来处理提交的$_POST类型。

  • 本文向大家介绍PHP多个文件上传到服务器实例,包括了PHP多个文件上传到服务器实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP多个文件上传到服务器的实现方法。对于多个文件同时上传到服务器的情况来说,我们需要使用到数组形式的参数传递及数据的遍历上传即可,具体的操作步骤分析如下: 一、实例说明 上传图片到服务器,是程序开发过程中必不可少的一个功能。它不但可以达到图片共享的目的,而且可

  • 我正在使用spring integration sftp入站流通道适配器,它每隔几秒钟就轮询一次。入站适配器正在多次挑选相同的文件进行处理。下面是配置。 上面代码中的sample.customFilter是SftpRegexPatternFileListFilter的一个子类,其中我将accept方法修改如下,以便根据Spring SFTP vanging filename-regex中提供的解决

  • 我有一个Spring批处理作业,它可能在多个服务器上运行。我有一个监听器,可以防止作业的多个实例在一台服务器上同时运行。但是,我要确保该作业不能同时在多台服务器上运行。 我已经找遍了,但没有找到解决这个问题的办法

  • 问题内容: 假设您正在使用一个对象,并且正在使用构造函数的设置来传递一个初始化函数,然后该初始化函数将在全局命名空间中创建资源。假设资源具有上下文管理器。如果上下文管理的资源必须在流程的整个生命周期中都可以使用,但是在最后要进行适当的清理,您将如何处理它的生命周期呢? 到目前为止,我有点像这样: 从这里开始,池进程可以使用资源。到现在为止还挺好。但是,由于类不提供or或参数,因此处理清理工作有些棘

  • 本文向大家介绍PHP多文件上传实例,包括了PHP多文件上传实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP多文件上传的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。