我想知道线程在 nifi 中如何工作,我的意思是一个处理器有一个线程还是它们在一个主线程中?也许我想从处理器获取一个文件,然后我想更新它
- 如何防止多个处理器同时获取文件数据
除了使用 keep file =false 操作?
- 是否可以在执行脚本处理器代码中使用 Thread.sleep ?
- 是否可以通过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);
我想知道线程在 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 做所有事情:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)