2013-07-31 2 views
1

Я использую интеграцию с весной для загрузки файлов и их обработки.Как указать выходной канал или порядок выполнения при использовании входящего канала-адаптера

<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. Я хочу указать выходной канал для этого входящего канала-адаптера, но у него нет никакого выходного канала.

Таким образом, я назвал трансформатор с тем же именем, что и адаптер входящего канала, так что он также будет называться сразу после начала опроса.

Моя проблема заключается в том, что трансформатор вызывается до того, как произойдет загрузка, и, следовательно, трансформатор не получит никаких входов для обработки и вызывает ошибку.

Можно ли указать «заказать» атрибут для этих двух задач. или есть ли какое-либо временное решение для выходного канала для адаптера входящего канала ?.

Я бы очень признателен за любую помощь по этому вопросу.

+0

@GaryRussell вы могли бы предложить что-то для этого? –

ответ

0

Вам необходимо прочитать Spring Integration Reference Manual и проработать около sample applications.

Адаптеры каналов не имеют входных и выходных каналов, у них есть channel s. Канальные адаптеры либо производят, либо потребляют сообщение (исходящий Vs исходящий) на своих channel. Элементы, такие как трансформаторы, активаторы сервисов и т. Д., Которые получают сообщение и выдают ответ, имеют входные и выходные каналы.

«Моя проблема заключается в том, что трансформатор вызывается до того, как произойдет загрузка, и, следовательно, трансформатор не получит никаких входов для обработки и вызывает ошибку».

Это утверждение не имеет для меня никакого смысла; если файла еще нет, нет ничего, чтобы «вызвать» трансформатор.

"атрибут для этих двух задач."

Не существует двух «задач».

Поллинговая нить вызывает входящий адаптер; то, когда файл прибывает, он отправляется как сообщение настроенному channel, который с вашей конфигурацией означает, что поток опроса вызывает трансформатор с сообщением.

0

Адаптер канала - это конечная точка сообщения, которая позволяет подключать одного отправителя или приемника к каналу сообщений.

В вашем случае, выходной канал 'FileDownloadChannel'

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

Для того, чтобы выполнить свои задачи в порядке, вы можете использовать цепочку сообщений 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> 
Смежные вопросы