1

我正在使用 spring 集成来下载文件并处理它们。

<int-sftp:inbound-channel-adapter channel="FileDownloadChannel"
                      session-factory="SftpSessionFactory"
                      remote-directory="/home/sshaji/from_disney/files"
                      filter = "modifiedFileListFilter"
                      local-directory="/home/sshaji/to_disney/downloads" 
                      auto-create-local-directory="true" >                       
       <integration:poller cron="*/10 * * * * *" default="true"/>   
</int-sftp:inbound-channel-adapter>

 <integration:transformer  input-channel="FileDownloadChannel"
                            ref="ErrorTransformer"
                            output-channel="EndChannel"/>

执行由轮询器启动。它调用“FileDownloadChannel”,然后尝试从 sftp 服务器下载文件。我想为此入站通道适配器指定一个输出通道,但它没有任何输出通道属性。

所以我将变压器命名为与入站通道适配器相同的名称,这样一旦轮询器启动它也会被调用。

我的问题是变压器在下载发生之前被调用,因此变压器不会得到任何输入来处理并导致错误。

有什么方法可以为这两个任务指定“订单”属性。或者入站通道适配器的输出通道是否有任何解决方法?

我真的很感激这方面的任何帮助。

4

2 回答 2

0

通道适配器是一个消息端点,可以将单个发送者或接收者连接到消息通道。

在您的情况下,输出通道是“ FileDownloadChannel

<integration:channel id="FileDownloadChannel"/>
<int-sftp:inbound-channel-adapter channel="FileDownloadChannel" ...>
   <integration:poller fixed-rate="10000"/>
</int-sftp:inbound-channel-adapter>

为了按顺序执行您的任务,您可以使用消息处理程序链,如下所示:

<integration:channel id="outputChannel"/>
<chain input-channel="FileDownloadChannel" output-channel="outputChannel">
    <filter ref="someSelector" throw-exception-on-rejection="true"/>
    <transformer ref="ErrorTransformer"/>
    <service-activator ref="someService" method="someMethod"/>
</chain>
于 2013-08-04T08:45:46.080 回答
0

您需要阅读Spring Integration Reference Manual并完成一些示例应用程序

通道适配器没有输入和输出通道,它们有channels. 通道适配器在其channel. 接收消息并产生回复的元素,如转换器、服务激活器等,具有输入和输出通道。

“我的问题是变压器在下载发生之前被调用,因此变压器不会得到任何输入来处理并导致错误。”

这种说法对我来说毫无意义;如果还没有文件,则没有什么可以“调用”变压器。

“这两个任务的属性。”

没有两个“任务”。

poller 线程调用入站适配器;然后,当文件到达时,它会作为消息发送给已配置的配置channel,根据您的配置,这意味着轮询线程使用消息调用转换器。

于 2013-07-31T17:04:38.467 回答