2016-12-28 89 views
0

在一臺駱駝路由器中,我們檢查一個標誌文件是否存在,並且只有在它存在時才繼續。這是我們打算使用的代碼,但它不起作用。檢查文件是否存在基於內容的路由

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(); 

我發現它在我的情況下語義更具可讀性和更清晰。