2015-07-06 3 views
1

Надеясь кто-то может помочь мне с этим ...Использование Spring Integration FTP-клиент без Poller

У нас есть следующий случай использования: по запросу, подключиться к удаленному серверу FTP, попытка до 3-х раз, чтобы загрузить файл (чье имя и путь предоставляется вызывающим абонентом). Отключиться от удаленного FTP-сервера. Подождите следующего запроса.

Поскольку Spring Framework не обеспечивает решение FTP-клиента, мы используем Spring Integration для этой цели. Проблема, с которой мы столкнулись, заключается в том, что для FTP-входящего канала-адаптера требуется установить poller, который непрерывно обследует удаленный сервер. В нашем случае нам нужно только опросить до трех раз, а затем отключиться. Затем дождитесь следующего запроса и так далее.

Есть ли способ сделать это с помощью интеграции с весной? Какие еще альтернативы у нас есть?

ответ

1

Модуль FTP интеграции с пружиной обеспечивает команду <int-ftp:outbound-gateway> командой GET для вашего случая. Кроме того, имеется retry поддержка из-под коробки <request-handler-advice-chain> и RequestHandlerRetryAdvice.

Дополнительную информацию см. В справочном руководстве по интеграции пружин.

+0

Спасибо, Артем. Использование ftp: исходящий-шлюз разрешил нашу проблему, не используя poller при получении файлов с FTP-сервера. Будет предоставлена ​​более подробная информация о фактическом решении в разделе ответов. – Erikson

1

Спасибо Артем за то, что указали мне в правильном направлении. Найдено link очень полезно.

Вот измененный FtpOutboundGatewaySample-context.xml, взятый из этой ссылки, который загружает файл a.txt с FTP-сервера. Обратите внимание, что по соображениям производительности он не выполняет команды LS и RM (только MGET):

<?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: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:user.properties"/> 
     <int:gateway id="gw" service-interface="org.springframework.integration.samples.ftp.ToFtpFlowGateway" 
      default-request-channel="inbound"/> 
     <bean id="ftpSessionFactory" 
     class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory"> 
      <property name="host" value="${host}"/> 
      <property name="port" value="${availableServerPort}"/> 
      <property name="username" value="${userid}"/> 
      <property name="password" value="${password}"/> 
     </bean> 
     <int-ftp:outbound-gateway id="gatewayGET" 
      local-directory="#{ T(org.springframework.integration.samples.ftp.TestSuite).LOCAL_FTP_TEMP_DIR}/gatewayGET" 
      session-factory="ftpSessionFactory" 
      request-channel="inbound"  
      command="mget" 
      command-options="-P" 
      expression="'a.txt'"/> 
    </beans> 
Смежные вопросы