我正在使用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”属性。或是否有入站通道适配器的输出通道的解决方法?。
我真的很感激任何帮助。
答案 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>