2016-12-28 4 views
0

1つのラクダルータでは、フラグファイルが存在するかどうかを確認し、存在する場合にのみ続行します。ここでは、使用する予定のコードはありますが、動作しません。コンテンツベースのルーティング用にファイルが存在するかどうかをチェック

String flagFilePath = "file:" + flagFileFolder 
     + "?noop=true&idempotent=false&fileName=" + flagFileName; 
    from(flagFilePath) 
     .choice() 
     .when(header("CamelFileName").isNotNull()) 
      .log(LoggingLevel.TRACE, "Flag file exists.") 
     .otherwise() 
      .log(LoggingLevel.INFO, "Flag file does not exist."); 

私は、ファイルが存在しない場合、全体のルータがトリガされていないためotherwiseがここにない到達可能であることを理解しています。

手書きの述語なしでファイルが存在するかどうかを簡単に確認する方法はありますか?

(注:上記のコードで見ることができるように、私は警告ログをトリガーするために、この条件を必要とする)

+0

フラグファイルが存在する場合は、呼び出したいルートの外にフラグチェックを入れて、そのルートを呼び出すべきではありませんか? –

+0

sendEmptyMessageWhenIdleオプション –

+0

@ClausIbsenを参照してください、問題が解決しました。この場合、 '.endChoice()'が必要ですか? –

答えて

0

は、私は答えとしてClausIbsenのコメント@ポストを直すつもりです。評判はすべて@ClausIbsenに行くべきです。

sendEmptyMessageWhenIdle=trueをファイルURIに追加すると、私の問題が解決します。

しかし、自分のコードにPredicateを使用することに決めました。

from("timer://a-processor?period=" + timerPeriod) 
     .routeId("ATimer") 
     .choice() 
     .when(exchange -> Files.exists(Paths.get(flagFileFolder, flagFileName))) 
      .log(LoggingLevel.DEBUG, "Flag file exists.") 
     .otherwise() 
      .log(LoggingLevel.DEBUG, "Flag file does not exist.") 
     .end(); 

私の場合、セマンティクスでより読みやすく、明確になっています。

関連する問題