2017-04-05 69 views
0

我在FTP INB通道ADPTR下面的代码,该公司告诉我,我在每一秒钟我登录...春FTP入站通道适配器 - 需要登录只有每5分钟

public static void main(String[] args) { 
     SpringApplication.run(FtpinboundApp.class, args); 
    } 

    @Bean 
    public SessionFactory<FTPFile> ftpSessionFactory() { 
     DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory(); 
     sf.setHost(remotehost); 
     sf.setPort(remoteport); 
     sf.setUsername(remoteuser); 
     sf.setPassword(remotepassword); 
     return sf; 
    } 

    @Bean 
    @ServiceActivator(inputChannel = "data", adviceChain = "after") 
    public MessageHandler handler() { 
     return new MessageHandler() { 

      @Override 
      public void handleMessage(Message<?> message) throws MessagingException { 
       try { 
        httpposthgfiles.getHGFilesfromRestful(message.getPayload().toString()); 
        httppost990.get990fromRestful(message.getPayload().toString()); 

       } catch (IOException e) { 
        logger.error(e); 
       } catch (Exception e) { 
        logger.error(e); 
       } 
      } 
     }; 
    } 

    @Bean 
    public ExpressionEvaluatingRequestHandlerAdvice after() { 
     ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice(); 
     advice.setOnSuccessExpression("@template.remove(headers['file_remoteDirectory'] + headers['file_remoteFile'])"); 
     advice.setPropagateEvaluationFailures(true); 
     return advice; 
    } 

    @Bean 
    @InboundChannelAdapter(value = "stream", poller = @Poller(fixedRate = "1000")) 
    public MessageSource<InputStream> ftpMessageSource() { 

     FtpStreamingMessageSource messageSource = new FtpStreamingMessageSource(template(), null); 

     messageSource.setRemoteDirectory(remotedirectory); 
     messageSource.setFilter(filter()); 

     return messageSource; 
    } 

    public FileListFilter<FTPFile> filter() { 
     CompositeFileListFilter<FTPFile> filter = new CompositeFileListFilter<>(); 
     filter.addFilter(new FtpSimplePatternFileListFilter("xxxx_aaa204*")); 
     filter.addFilter(acceptOnceFilter()); 
     return filter; 
    } 

    @Bean 
    public FtpPersistentAcceptOnceFileListFilter acceptOnceFilter() { 
     FtpPersistentAcceptOnceFileListFilter filter = new FtpPersistentAcceptOnceFileListFilter(meta(), "xxxx_aaa204"); 
     filter.setFlushOnUpdate(true); 
     return filter; 
    } 

    @Bean 
    public ConcurrentMetadataStore meta() { 
     PropertiesPersistingMetadataStore meta = new PropertiesPersistingMetadataStore(); 
     meta.setBaseDirectory("/tmp/foo"); 
     meta.setFileName("ftpStream.properties"); 
     return meta; 
    } 

    @Bean 
    @Transformer(inputChannel = "stream", outputChannel = "data") 
    public org.springframework.integration.transformer.Transformer transformer() { 
     return new StreamTransformer("UTF-8"); 
    } 

    @Bean 
    public FtpRemoteFileTemplate template() { 
     return new FtpRemoteFileTemplate(ftpSessionFactory()); 
    } 

    @Bean(name = PollerMetadata.DEFAULT_POLLER) 
    public PollerMetadata defaultPoller() { 
     PollerMetadata pollerMetadata = new PollerMetadata(); 
     pollerMetadata.setTrigger(new PeriodicTrigger(600_000)); 
     return pollerMetadata; 
    } 

为什么? 是这个原因,我有:

@InboundChannelAdapter(value = "stream", poller = @Poller(fixedRate = "1000 

??? 在我的理解设置:

pollerMetadata.setTrigger(new PeriodicTrigger(300_000)); 

会让我记录每5分钟?

,并在fixedRate = "1000会让我采取下一步的文件每一秒......

回答

1

由于您使用fixedRate那里,你不使用PollerMetadata.DEFAULT_POLLER,还有前您连接到FTP真的每一秒。

@PollerPollerMetadata.DEFAULT_POLLER确实代表着相同的实体并相互排斥。

登录FTP和文件下载发生在同一会话。所以,目标FTP服务器没有区别。

+0

哦,我看到了,听起来像我可以删除PollerMetadata并设置我的fixedRate =“300000”,我会尝试它。 – viruskimera

+0

是的,的确如此。还要注意'fixedRate'和'fixedInterval'的区别。 –

+0

我注意到我每次轮询只处理1个文件,我想如果我添加@Poller(fixedRate =“300000”,maxMessagesPerPoll =“-1”),我会尽可能多地获取文件,不知道有多少,但我猜足够。 – viruskimera

相关问题