当我们使用入站通道适配器时,如何指定输出通道或执行顺序

时间:2013-07-31 16:17:37

标签: spring-integration

我正在使用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服务器下载文件。 我想为此入站通道适配器指定输出通道,但它没有任何输出通道属性。

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

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

我们是否可以为这两项任务指定“order”属性。或是否有入站通道适配器的输出通道的解决方法?。

我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:0)

您需要阅读Spring Integration Reference Manual并完成一些sample applications

频道适配器没有输入和输出通道,它们有channel秒。通道适配器在其channel上生成或使用消息(入站Vs出站)。接收消息并产生回复的变形金刚,服务激活器等元素具有输入和输出通道。

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

这句话对我没有意义;如果还没有文件,那就没有什么可以用“召唤”变压器了。

“这两项任务的属性。”

没有两个“任务”。

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

答案 1 :(得分:0)

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

在您的情况下,输出频道为“ FileDownloadChannel

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

为了按顺序执行任务,您可以按如下方式使用Message Handler链:

<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>