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

使用Spring集成在不同服务器上传输文件(sftp)

邓宜年
2023-03-14

我需要在SI中构建一个应用程序,它读取一个输入目录,该目录可能包含1000个文件,并将它们复制到远程服务器,例如10个服务器,处理器实例将在其中接收它们进行处理。文件的移动应该是循环方式,以便在处理它们时不会给任何服务器带来额外的负担。再详细一点——假设我们在输入目录中有10个文件,那么应用程序应该在服务器1上复制文件1,在服务器2上复制文件2......服务器10上的文件10。

顺序并不重要,重要的是每个服务器的负载应该相等。我对Spring集成相当陌生,但我发现了一个使用SI进行文件sftp的示例

https://github.com/spring-projects/spring-integration-samples/tree/master/basic/sftp

但我不确定如何为多个服务器配置它,并使用一个算法以循环方式移动文件。

如果有任何提示或建议,我将不胜感激。

我能够使用下面的配置进行sftp。

<context:property-placeholder location="classpath:app.properties" />

<int-file:inbound-channel-adapter id="ReaderChannel"
    directory="file:${input.file.dir}" filename-pattern="*.*"
    prevent-duplicates="true" ignore-hidden="true" auto-startup="true">
    <int:poller id="poller" fixed-rate="1" task-executor="myTaskExecutor" />
</int-file:inbound-channel-adapter>

<int-task:executor id="myTaskExecutor"  pool-size="${file.concurrentFilesNum}" queue-capacity="0"   rejection-policy="CALLER_RUNS" />

<int-sftp:outbound-channel-adapter  id="sftpOutboundAdapter" session-factory="sftpSessionFactory" channel="ReaderChannel"
    charset="UTF-8" remote-directory="${output.file.dir}" auto-startup="true">
    <int-sftp:request-handler-advice-chain>
        <int:retry-advice />
    </int-sftp:request-handler-advice-chain>
</int-sftp:outbound-channel-adapter>

<beans:bean id="sftpSessionFactory"     class="org.springframework.integration.file.remote.session.CachingSessionFactory">
    <beans:constructor-arg ref="defaultSftpSessionFactory" />
</beans:bean>

<beans:bean id="defaultSftpSessionFactory"
    class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
    <beans:property name="host" value="${sftp.host}" />
    <beans:property name="privateKey" value="${sftp.private.keyfile}" />
    <beans:property name="privateKeyPassphrase" value="${sftp.private.passphrase}" />
    <beans:property name="port" value="${sftp.serverPort}" />
    <beans:property name="user" value="${sftp.username}" />
    <beans:property name="allowUnknownKeys" value="true" />
</beans:bean>

共有1个答案

孙玮
2023-03-14

循环隐藏在DirectChannel中,使用单播Dispatcher在循环负载平衡策略上。

因此,当您有多个订阅者访问同一个DirectChannel时,消息将以循环方式发送给他们。

您需要为用例配置10

<代码>

 类似资料:
  • 在我的项目中,我在后端有Spring Boot,在前端有React.js。 我的后端工作正常,我知道,因为我已经用Postman测试过了。 在上传文件的前端,我有一个名为 ,它看起来像这样: 但问题是每次上传都失败。也许原因是路径,不确定。我试图路径。我得到的是C:\fakepath\Screenshot(187). png 现在我的问题是,如果是因为路径,我怎么才能正确地做它(据我所知,浏览器不

  • 我使用的是Spring Batch 2。版本我已经生成了csv文件,并能够在本地以csv格式保存。 现在我想生成相同的文件,但它将存储在SFTP服务器上。 我已经阅读了一些在sftp服务器上生成文件的教程,但它们使用的是spring与spring Batch的集成。 是否可以仅使用Spring批处理在SFTP服务器上生成文件? 下面是itemReader bean defined:: ItemWr

  • 我有一个要求,我想使用spring集成,但不想使用spring boot从sftp服务器下载文件。我在这里使用jcraft库。希望使用spring集成库。

  • 我正在使用Spring4.0为RESTfulWeb服务创建POC。如果我们只传递字符串或任何其他基本数据类型,它就可以正常工作。 这个很好用。但如果我想将字节流或文件对象传递给函数,我如何编写具有这些参数的函数?我如何编写提供传递字节流的客户端? 我尝试了这个代码,但是得到了415个错误。 客户端代码-使用apache HttpClient

  • 我需要登录到unix服务器,执行switch user,执行一些命令,然后将这些命令创建的文件scp到另一台服务器。我能够连接到服务器,执行sudo登录和执行命令,但我无法将文件直接scp到另一个远程服务器。 我用的是Jsch jar。下面是我的代码。 public void executeChannel(会话会话、字符串命令、字符串pwd、列表文件)引发异常{ command=sudo su-p

  • 在Django python服务器上,我定制了一个用户可以上传文件的URL。现在的问题是,当我点击浏览器时,我能够成功地上传文件,但当我使用curl尝试同样的事情时,我无法做到这一点。 意见。派克 ........ ........ ........ ........ 名单。html 在浏览器上 在终点站,我试过了 我尝试了一些其他的变化,但似乎没有成功。我还尝试了一些其他命令,它们给出了“无cs