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

spring integration SFTP:inbound-channel-adapter delete-remote-files=false

丁文轩
2023-03-14

我们使用spring integration sftp:inbound-channel-adapter从远程主机传输数据。我们希望将文件保留在远程主机上。因此,我们尝试使用delete-remote-files=false选项。

<int-sftp:inbound-channel-adapter 
    id="sftpInboundChannelAdapter"
    channel="filesToParse"  
    session-factory="..."
    remote-directory="..." 
    filename-pattern="..." 
    local-directory="..." 
    temporary-file-suffix=".tmp" 
    delete-remote-files="false" 
    auto-create-local-directory="true" local-filter="localFileFilter"
>

不幸的是,这些文件会被多次处理。是否有一种方法可以保存远程文件而不多次处理它们?

编辑:这是因为随后的进程会在本地端删除文件。

    <bean id="localFileFilter" class="org.springframework.integration.file.filters.AcceptAllFileListFilter"/>

共有1个答案

鲜于璞瑜
2023-03-14

请注意acceptoncefilelistfilter(实际上是默认值)将只防止当前执行的重复;它将其状态保存在内存中。

为了避免跨执行重复,您应该使用配置有适当元数据存储的FileSystemPersistentAcceptOnceFileListFilter。

注意,PropertiesPersistingMetadataStore仅在正常的应用程序上下文关闭(关闭)时将其状态保存到磁盘上,因此最健壮的解决方案是Redis或MongoDB(或您自己的ConcurrentMetadataStore实现)。

 类似资料:
  • remote 模块提供了一种在渲染进程(网页)和主进程之间进行进程间通讯(IPC)的简便途径。 Electron中, 与GUI相关的模块(如 dialog, menu 等)只存在于主进程,而不在渲染进程中 。为了能从渲染进程中使用它们,需要用ipc模块来给主进程发送进程间消息。使用 remote 模块,可以调用主进程对象的方法,而无需显式地发送进程间消息,这类似于 Java 的 RMI。 下面是从

  • 在渲染进程中使用主进程模块。 进程: 渲染进程 remote 模块为渲染进程(web页面)和主进程通信(IPC)提供了一种简单方法。 在Electron中, GUI 相关的模块 (如 dialog、menu 等) 仅在主进程中可用, 在渲染进程中不可用。 为了在渲染进程中使用它们, ipc 模块是向主进程发送进程间消息所必需的。 使用 remote 模块, 你可以调用 main 进程对象的方法,

  • Files 作为 Values 功能的补充,可以存放最大20m的文本或二进制内容(Values只能存放比较小的文本内容),主要用于快速将请求或响应内容保存到系统文件,方便做本地替换,也可以在whistle远程部署时,上传大块文件用来设置规则(本地部署可以直接配置本地路径即可)。

  • Channel 到概念上的端点的虚拟连接,用于执行RPC。 通道可以根据配置,负载等自由地实现与端点零或多个实际连接。通道也可以自由地确定要使用的实际端点,并且可以在每次 RPC 上进行更改,从而允许客户端负载平衡。应用程序通常期望使用存根(stub),而不是直接调用这个类。 应用可以通过使用 ClientInterceptor 装饰 Channel 实现来为 stub 添加常见的切面行为。预计大

  • 建议先查看概览,了解一些协程基本概念后再看此节。 通道,用于协程间通讯,支持多生产者协程和多消费者协程。底层自动实现了协程的切换和调度。 实现原理 通道与PHP的Array类似,仅占用内存,没有其他额外的资源申请,所有操作均为内存操作,无IO消耗 底层使用PHP引用计数实现,无内存拷贝。即使是传递巨大字符串或数组也不会产生额外性能消耗 channel基于引用计数实现,是零拷贝的 使用示例 Co\r

  • channel数据结构 Go语言channel是first-class的,意味着它可以被存储到变量中,可以作为参数传递给函数,也可以作为函数的返回值返回。作为Go语言的核心特征之一,虽然channel看上去很高端,但是其实channel仅仅就是一个数据结构而已,结构体定义如下: struct Hchan { uintgo qcount; // 队列q中的总数据数量 uintgo dataq