2013-06-20 2 views
4

Я работал над интеграцией с весной <int-ftp:outbound-gateway>, я смог загрузить файлы с удаленного сервера с ftp-outbound-gateway, но есть одна проблема, которую я еще не смог решить, если удаленный каталог содержит файлы системы работают и будут завершены без каких-либо проблем, но если бы не была система файлов, зависающая без выполнения этой точки. Я хочу продолжить работу с системой. содержит ли удаленная папка файлы или нет,Весенняя интеграция ftp-outbound-gateway без удаленных файлов

Вот моя конфигурация для FTP-загрузки

<?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:context="http://www.springframework.org/schema/context" 
     xmlns:int="http://www.springframework.org/schema/integration" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:int-ftp="http://www.springframework.org/schema/integration/ftp" 
     xsi:schemaLocation="http://www.springframework.org/schema/integration/ftp 
     http://www.springframework.org/schema/integration/ftp/spring-integration-ftp.xsd 
     http://www.springframework.org/schema/integration 
     http://www.springframework.org/schema/integration/spring-integration.xsd 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:property-placeholder location="classpath:host.properties"/> 

    <int:gateway id="gw" service-interface="com.util.ToFtpFlowGateway" 
       default-request-channel="inbound"/> 

    <bean id="downloadProcessBean" class="com.util.FTPDownloadInterceptor"> 
     <property name="fileType" value="txt"/> 
     <property name="sourceType" value="ftp"/> 
     <property name="destinationName" value="destinationName"/> 
     <property name="destinationQueName" value="destinationQueName"/> 
     <property name="sourceAddressDetails" value="sourceAddressDetails"/> 
     <property name="sourceName" value="sourceName"/> 
    </bean> 

    <bean id="ftpSessionFactory" 
      class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory"> 
     <property name="host" value="${local.host}"/> 
     <property name="port" value="${local.availableServerPort}"/> 
     <property name="username" value="${local.userid}"/> 
     <property name="password" value="${local.user.password}"/> 
    </bean> 

    <int-ftp:outbound-gateway id="gatewayLS" cache-sessions="false" 
           session-factory="ftpSessionFactory" 
           request-channel="inbound" 
           command="ls" 
           command-options="" 
           expression="payload" 
           reply-channel="toSplitter" reply-timeout="10" /> 

    <int:channel id="toSplitter"> 
     <int:interceptors> 
      <int:wire-tap channel="logger"/> 
     </int:interceptors> 
    </int:channel> 

    <int:logging-channel-adapter id="logger" log-full-message="true" /> 

    <int:splitter id="splitter" input-channel="toSplitter" output-channel="toGet"/> 

    <int-ftp:outbound-gateway id="gatewayGET" cache-sessions="false" 
           local-directory="/home/udeshika/project/req/local/download" 
           session-factory="ftpSessionFactory" 
           request-channel="toGet" 
           reply-channel="toRemoveChannel" 
           command="get" 
           command-options="-P" 
           expression="payload.remoteDirectory + '/' + payload.filename" reply-timeout="10"/> 

    <int-ftp:outbound-gateway id="gatewayRM" 
           session-factory="ftpSessionFactory" cache-sessions="false" 
           expression="payload.remoteDirectory + '/'+ payload.filename" 
           request-channel="toRemoveChannel" 
           command="rm" 
           reply-channel="aggregateResultsChannel" 
           auto-create-local-directory="true" 
           reply-timeout="10" 

      /> 
    <!--<bean id="fileDownloadIntecepter" class="shipxpress.util.FTPDownloadInterceptor"/>--> 
    <int:channel id="toRemoveChannel"> 
     <int:interceptors> 
      <int:wire-tap channel="logger2"/> 
      <!--<int:ref bean="fileDownloadIntecepter" />--> 
     </int:interceptors> 
    </int:channel> 

    <bean class="org.springframework.integration.file.FileReadingMessageSource" 
      p:directory="${download.directory}"/> 

    <int:logging-channel-adapter id="logger2" log-full-message="true" /> 

    <int-ftp:outbound-gateway id="gatewayRM" 
           session-factory="ftpSessionFactory" cache-sessions="false" 
           expression="headers['file_remoteDirectory'] + '/' + headers['file_remoteFile']" 
           request-channel="toRemoveChannel" 
           command="rm" 
           reply-channel="aggregateResultsChannel"/> 

    <int:aggregator input-channel="aggregateResultsChannel"/> 

</beans> 

Может кто-нибудь помочь мне очистить это,

Спасибо заранее Udeshika,

ответ

3

Проблема с этим потоком: LS возвращает пустой список; когда это попадает на сплиттер, это не приводит к сообщениям, и поток прекращается. Поток, который вызывает шлюз, ждет ответа (по умолчанию).

Добавить таймаут ответа на шлюз, и он будет возвращать null, если ответ не получен.

<int:gateway id="gw" service-interface="org.springframework.integration.samples.ftp.ToFtpFlowGateway" 
    default-request-channel="inbound" default-reply-timeout="100" /> 

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

+0

Спасибо, он работал – 123Ex

+0

Вот еще одна проблема с этим: Как я могу обрабатывать Null сообщения с этим? – 123Ex

+0

Я не знаю, что вы подразумеваете под «дескриптором Null messages». \t \t 'Список rmResults = toFtpFlow.lsGetAndRmFiles (" fooDir/");' 'if (lmResults == null) {logger.debug (« файлы не переданы »)}' –

Смежные вопросы