Nifi:nifi中的线程

Tkh*_*ome 1 java groovy multithreading apache-nifi

我想知道线程在nifi中是如何工作的,我是说一个处理器有一个线程还是它们在一个主线程中?也许我想从处理器获取一个文件,然后再更新

  1. 除了使用keep file = false操作外,如何防止一次由多个处理器获取文件数据?
  2. 是否可以在执行脚本处理器代码中使用Thread.sleep?
  3. 可以通过groovy做出相同的逻辑吗?

我尝试使用Java File锁,但是在我的代码看来似乎无法正常工作,

     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);
Run Code Online (Sandbox Code Playgroud)

dag*_*ett 5

我想知道线程在nifi中是如何工作的,我是说一个处理器有一个线程还是它们在一个主线程中?

Nifi有一个可配置的线程池,( sandwich menu -> controller settings -> general )当计划执行任何处理器时,系统会从该池中获取空闲线程,在该线程中执行处理器,然后将线程返回到线程池。因此,每个处理器都在单独的随机线程中执行。

除了使用keep file = false操作外,如何防止一次由多个处理器获取文件数据?

您需要存储一个标志file XXX processed。您将如何存储它-这是您的选择。例如,您可以创建一个具有相同名称但扩展名为的空文件conf.xml -> conf.xml.done。在代码中,只需检查文件是否conf.xml.done存在,然后跳过conf.xml文件处理即可。

您可以将标志存储在数据库,缓存系统等中。

是否可以在执行脚本处理器代码中使用Thread.sleep?

可能,但是对此我没有任何意义。

可以通过groovy做出相同的逻辑吗?

你可以用groovy来做所有的事情:)