2017-10-10 9 views
1

私は、グローバルに定義されたFTP Camelルートを持っています。 hereを説明するように、再利用Camel FTPルート

exchange.getContext().startRoute("downloadRoute"); 

、別のスレッドで停止:それは別のルートから開始され

.process(new Processor() { 
    Thread stop; 
    @Override 
    public void process(final Exchange exchange) throws Exception { 
     stop = new Thread() { 
      @Override 
      public void run() { 
       try { 
        log.info("Stopping route"); 
        exchange.getContext().stopRoute("downloadRoute"); 
       } catch (Exception e) { 
       } finally { 
        latch.countDown(); 
       } 
      } 
     }; 
     stop.start(); 
    } 
}) 

それは正常に動作します。今私はこのルートをもう一度始めたいと思う。フォルダに新しいファイルを追加して、それらをもう一度ダウンロードするか、ダウンロードしたファイルを再ダウンロードしたいとします。
私は同じコマンドでこのルートを再開しますが、ファイルをダウンロードすることはありません。ルートのどこかにダウンロードされたとマークされているため、単にファイルが表示されません。一方、私がラクダのコンテキストからこのルートを削除してからもう一度追加して起動すると、ファイルが再びダウンロードされます。

したがって、既存のルートを再利用して(start-stop-start)、新しいルートとして開始する方法がありますか?

+0

これを試してくださいhttps://stackoverflow.com/questions/18211918/camel-ftp-only-run-once –

+0

いいえ、私は経路を停止することができます。私は新しいものとして再びそれを始めることができません。 – streetturtle

答えて

1

一般的に、これはApache Camelの悪用だと思います。ルートは、アプリケーション内で何度も開始または停止されることを意味しません。 Camelのルートは一般的に定義され、アプリケーションの起動時に起動され、アプリケーションが停止するまで停止しません。

file consumerベースのルート(ファイル、FTP、SFTPなど)を使用してオンデマンドでファイルを再ダウンロードする場合は、.camelディレクトリからファイルを移動するのが正しい方法だと思います。デフォルトで置かれている)を、ファイルが監視するディレクトリに戻します。必要に応じて、これをプログラムによって簡単に行うことができます。

これにより、Camelはファイルを再ダウンロードする必要があります。終了するとCamelは.camelディレクトリに戻します。必要に応じて、ファイルコンポーネントフラグ(.camelがデフォルトです)を使用して、.camelとは別のディレクトリを使用することもできます。

関連する問題