Spring ftp-outbound-gateway integration without remote files

I worked on spring integration <int-ftp:outbound-gateway> , I was able to download files from a remote server using ftp-outbound-gateway , but there is one problem that I could not solve yet. If the remote directory contains files, the system is working and will be completed without any problems, but if there was no file system, freeze without executing this point. I want to continue working with the system. the remote folder contains files or not,

Here is my configuration for ftp download

  <?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> 

Can someone help me clear this

Thanks in advance Udeshika,

+4
source share
1 answer

The problem with this thread is that LS returns an empty list; when it hits the splitter, it does not produce messages, and the flow stops. The thread that the gateway calls is waiting for a response (default) for the response.

Add a response time to the gateway, and it will return null if no response is received.

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

As long as you use Direct channels, there is no danger of the gateway failing when there is real work, because the timer does not start until the stream returns to the gateway to look for any answer that was created by the downstream stream.

+3
source

Source: https://habr.com/ru/post/1487227/


All Articles