Tkh*_*ome 1 java groovy multithreading apache-nifi
我想知道线程在nifi中是如何工作的,我是说一个处理器有一个线程还是它们在一个主线程中?也许我想从处理器获取一个文件,然后再更新
我尝试使用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)
我想知道线程在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来做所有的事情:)