Arhn - архитектура программирования

как опросить локальный ftp-каталог через адаптер входящего ftp-канала?

Я новичок в весенней интеграции. Пожалуйста, извините меня, если я прошу что-то обычное. У меня есть один простой вариант использования. Я настроил адаптер входящего канала ftp, как показано ниже. Используя его, я могу вытащить файлы удаленной проверки в локальный каталог. i.e.D:/Исходящий. Теперь я хочу опросить локальный каталог, т.е. i.e.D:/Outbound, чтобы добавить дополнительную бизнес-логику. т. е. Загрузите исходный файл с удаленного компьютера на основе состояния файла проверки и переместите соответствующие файлы проверки в другое место в каталоге. Как я должен это делать ? Будем признательны за любой образец быстрого кода или справочное руководство/ссылки.

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:int="http://www.springframework.org/schema/integration"
       xmlns:int-ftp="http://www.springframework.org/schema/integration/ftp"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/integration/ftp http://www.springframework.org/schema/integration/ftp/spring-integration-ftp.xsd">

  <context:property-placeholder location="/ftp/ftp.properties"/>
  <context:component-scan base-package="com.sandbox.ftp"/>

  <!-- FTP inbound channel adapter for reading the input check files -->
  <int-ftp:inbound-channel-adapter id="ftpInbound"
                                   channel="ftpInboudChannel"
                                   session-factory="ftpClientFactory"
                                   auto-create-local-directory="true"
                                   local-directory="D:/outBound"
                                   remote-directory="."
                                   filename-regex=".*\.chk$">
            <int:poller fixed-rate="5000" />
  </int-ftp:inbound-channel-adapter>

  <int:channel id="ftpInboudChannel"/>

  <!--Service Activator which will intiates the download of original source file  -->
  <int:service-activator input-channel="ftpInboudChannel" ref="myPojo" method="processFile" />
  <bean id="myPojo" class="com.sandbox.ftp.CheckFileProcessor" />

  <!-- FTP inbound channel adapter for downloading the original remote files -->
  <int-ftp:inbound-channel-adapter id="ftpInboundDownload"
                                   channel="ftpInboudDownloadChannel"
                                   session-factory="ftpClientFactory"
                                   auto-create-local-directory="true"
                                   local-directory="D:/outBound/original"
                                   remote-directory="."
                                   filename-regex=".*\.txt$">
            <int:poller fixed-rate="5000"/>
  </int-ftp:inbound-channel-adapter>

  <int:channel id="ftpInboudDownloadChannel"/>


</beans>

Теперь, основываясь на комментарии Гэри, я использовал активатор службы и смог загрузить исходные файлы, т.е. *.текст. Теперь я хочу переместить связанные файлы проверки в ту же папку после загрузки исходного файла. то есть *.chk в D:/outBound/original. Есть предположения ?


  • Не могли бы вы уточнить, что вы подразумеваете под дальнейшей бизнес-логикой? SO не рекомендует справочные руководства, но это не совсем ваш вопрос. 02.12.2015
  • @Teepeemm Спасибо за быстрый ответ. Здесь, с помощью дальнейшей бизнес-логики, для этого варианта использования я имею в виду загрузку исходного файла с удаленного устройства на основе состояния файла проверки и перемещение соответствующих файлов проверки в другое место в каталоге. 02.12.2015

Ответы:


1

Все, что нужно сделать, это сбросить файл в канал очереди — я полагаю, вы получили это из примера приложения.

См. справочник по интеграции Spring.

Это может сделать простое приложение (удалить <queue/> из канала)...

<int:channel id="ftpInboudChannel"/>

<int:service-activator input-channel="ftpInboudChannel"
    ref="myPojo" method="processFile" />

<bean id="myPojo" class="foo.MyPojo" />

public class MyPojo {

    public void processFile(File fileToProcess) {
        ...
    }
}

ИЗМЕНИТЬ

Я не совсем уверен, каков ваш вариант использования, но похоже, что вы хотите получить файл .txt только тогда, когда присутствует файл .chk.

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

<int:channel id="ftpInboudChannel"/>

<int:transformer input-channel="ftpInboudChannel" output-channel="ftpGet"
    expression="payload.name.replace('chk$', 'txt')" />

<int:ftp-outbound-gateway request-channel="ftpGet" command="get"
     ...
    replyChannel="ftpGot" />

<int:service-activator input-channel="ftpGot" ... />

Другими словами, извлекайте файл по запросу, а не опрашивайте его.

Вы также можете использовать шлюз для просмотра (LS) файлов и получения тех, которые вас интересуют.

02.12.2015
  • @Gary Большое спасибо за ваш ответ. Это именно то, что я хочу. Я обновил свой вопрос о ходе разбирательства. Не могли бы вы поделиться своим мнением по этому поводу. 02.12.2015
  • Смотрите мое редактирование; пример ftp содержит другие примеры использования шлюз (LS, GET, RM и т. д.). 02.12.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..