2017-10-20 147 views
0

我想知道線程在nifi中的工作方式我的意思是一個處理器有一個線程或者它們在一個主線程中?也許是我想從處理器獲得一個文件,然後我想更新Nifi:nifi中的線程

  1. 我怎麼能防止幾個處理器獲取文件數據,以一定的時間 除了使用保留文件=假動作?
  2. 是否有可能在內部使用Thread.sleep執行腳本處理器代碼?
  3. Groovy有可能製作相同的邏輯嗎?

我試圖用Java文件鎖,但它似乎沒有工作好,這裏是我的代碼,

 File file = new File("C://Users//user//Desktop//try2//nifi- 
     1.3.0//4//conf2.xml"); 
     String content = ""; 
     String material = ""; 
     BufferedReader s; 
     BufferedWriter w; 
     int m; 
     RandomAccessFile ini = new RandomAccessFile(file, "rwd"); 
     FileLock lock = ini.getChannel().lock(); 
     DocumentBuilder dBuilder; 
     Document document, doc; 
     String date=""; 
     String data=""; 
     boolean make = false; 
     try { 

      String sCurrentLine; 
      s = new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8")); 
      while ((sCurrentLine = s.readLine()) != null) { 
       content += sCurrentLine; 
      } 
      ini.seek(0); 

回答

3

我想知道線程nifi是如何工作的我的意思是一個處理器有一個線程還是它們在一個主線程中?

Nifi有螺紋(sandwich menu -> controller settings -> general)當計劃執行的任何處理器,系統採用自由線程從池中,在這個線程執行處理器的配置池,並返回線程的線程池。所以,每個處理器在一個單獨的隨機線程中執行。

如何防止在幾次處理器獲取文件數據時 除了使用keep file = false action?

您需要存儲標誌file XXX processed。你將如何存儲它 - 這是你的選擇。例如,您可以創建一個具有相同名稱但添加了擴展名的空文件:conf.xml -> conf.xml.done。並在代碼中檢查是否存在文件conf.xml.done,然後跳過conf.xml文件處理。

你可以存儲在數據庫中,緩存系統旗等

是否有可能使用了Thread.sleep內執行腳本處理器的代碼?

可能的,但我沒有看到任何意義。

groovy有可能做出同樣的邏輯嗎?

你可以在groovy中做所有事情:)