2016-06-16 12 views
2

私は現在、SI DSL SFTP機能を使っていくつかのファイルをプッシュしようとしています。Spring統合DSL SFTP良い習慣

私はこのfwkの使用に堪能ではありませんので、私が達成しようとしていることを実行するためのより良い方法があるのだろうかと思います。

それは一種のファイルがコピーされる場合を除き、次のように働いて、残りの呼び出しがタイムアウト状態に落ちる...

ボーナス:SI DSLについていくつかの良い測定値(オンラインブックまたは)はありますか? (カフェSIのサンプルとリファレンスを除く。)

編集:

  • は、このSIフローは、SIグッドプラクティスに従っていますか?
  • ファイルがsftpサーバーに正しくコピーされても、私の残りの呼び出しがタイムアウトで終了するのはなぜですか?

のJava設定:

@Configuration 
    @EnableIntegration 
    @IntegrationComponentScan 
    public class IntegrationConfig { 

     //flow gateway 
     @MessagingGateway 
     public interface FlowGateway { 
      @Gateway(requestChannel = "SftpFlow.input") 
      Collection<String> flow(Collection<File> name); 

     } 

     //sftp flow bean 
     @Bean 
     public IntegrationFlow SftpFlow() { 
      return f -> f 
       .split() 
       .handle(Sftp.outboundAdapter(this.sftpSessionFactory(), FileExistsMode.REPLACE) 
         .useTemporaryFileName(false) 
         .remoteDirectory(sftpFolder)); 
     } 

     //sftp session config 
     @Bean 
     public DefaultSftpSessionFactory sftpSessionFactory() { 
      System.out.println("Create session"); 
      DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true); 
      factory.setHost(sftpHost); 
      factory.setPort(Integer.valueOf(sftpPort)); 
      factory.setUser(sftpUser); 
      factory.setPassword(sftpPwd); 
      factory.setAllowUnknownKeys(true); 
      return factory; 
     } 

} 

RestControllerクラス:

@Autowired 
private FlowGateway flowGateway; 

@RequestMapping("/testSftp") 
public String testSftp() { 
    flowGateway.flow(Arrays.asList(file1, file2, file3); 
} 

答えて

1
  1. 春の統合JavaのDSLは完全に春の統合コアを搭載しています。したがって、すべてのコンセプト、レシピ、ドキュメント、サンプルなども同様に適用されます。

  2. どのような質問ですか?私は推測させてください: "それはなぜタイムアウトとブロックですか?それは私が読む場所を知っているので私にとって明らかですが、それは他の人にとっては明らかではないかもしれません。次回はもっと具体的にしてください。あなたの質問を「不明瞭」として閉じることができる十分な人がいます。

だから、あなたが持っているものとそれがあなたが望んでいない理由を分析しよう。

スプリング統合のエンドポイントは、one-waySftp.outboundAdapter())またはrequest-replySftp.outboundGateway())です。 one-wayあなたの場合のように返ってフローを続行するか返信を送ることは何もありません。

私はあなたが返信に興味がないと確信しています。そうでない場合は、別のエンドポイントを使用しています。

プロセスが.split()からすべての項目を送信した後に正確に停止し、あなたのコードが示すように@Gatewayに送り返すためには何もありません:非void戻り値の型を持つ

Collection<String> flow(Collection<File> name); 

は下流からreplyが必要ですrequestChannelに流れてください。

詳細については、Messaging Gatewayを参照してください。

はまた、並行してSFTPにファイルを送信するために.split()

.channel(c -> c.executor(taskExecutor())) 

を使用することを検討してください。

P.S.これまでのところすべてがあなたのコードでうまくいけば、ちょうどこの厄介なreplyの問題があるので、私はあなたが何を読む必要があるのか​​分かりません。

+0

非常に明確な答えです。私が予想したとおりです。私はあなたの発言に従って私の質問を編集しました。 –

関連する問題