Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ApacheNIFI:在将文件添加到目录后直接运行Java进程_Java_Apache Nifi - Fatal编程技术网

ApacheNIFI:在将文件添加到目录后直接运行Java进程

ApacheNIFI:在将文件添加到目录后直接运行Java进程,java,apache-nifi,Java,Apache Nifi,我对ApacheNifi相当陌生 我想设置一个流,其中有一个文件被放入“热文件夹”。如果此文件夹检测到一个文件放入其中,则该文件将被放入另一个名为“input”的文件夹中。一旦文件被复制到输入文件夹中,我想触发一个Java程序来运行 我的方法是创建一个“GETFILE”处理器,从热文件夹中获取文件。然后创建一个文件处理器,将其放入输入文件夹。因此,您可以想象“GETFILE”和“PUTFILE”处理器之间存在连接。这正如预期的那样有效 然而,我面临的挑战是,在将文件复制到输入文件夹时(即在执行P

我对ApacheNifi相当陌生

我想设置一个流,其中有一个文件被放入“热文件夹”。如果此文件夹检测到一个文件放入其中,则该文件将被放入另一个名为“input”的文件夹中。一旦文件被复制到输入文件夹中,我想触发一个Java程序来运行

我的方法是创建一个“GETFILE”处理器,从热文件夹中获取文件。然后创建一个文件处理器,将其放入输入文件夹。因此,您可以想象“GETFILE”和“PUTFILE”处理器之间存在连接。这正如预期的那样有效

然而,我面临的挑战是,在将文件复制到输入文件夹时(即在执行PUTFILE处理器之后),触发Java进程运行。我无法在PUTFILE和EXECUTEPROCESS处理器之间创建链接(作为在文件从热文件夹复制到输入文件夹后告诉NIFI运行Java进程的一种方式)。我似乎无法将连接箭头连接到PUTFILE和EXECUTEPROCESS处理器之间(因为NIFI不允许)

基于上述描述,是否有人可以推荐一种方法,在检测到文件被添加到输入文件夹后,告诉NIFI触发Java应用程序运行


谢谢。

您希望做的事情很有意义,我们实际上曾经允许类似的处理器。事实证明,虽然有足够多的边缘情况,决定如何处理输入流文件变得相当困难,因此我们有一个当前非常明确的模型,这基本上意味着处理器与cron调度相结合是一个奇特的cron工具

因此,我们转而关注的是NiFi 0.5.0发行版,该发行版将在几天内发布。这是一个非常令人兴奋的特性,它允许脚本根据内嵌流进行编写。ExecuteScript处理器听起来非常适合您的情况。例如,如果您运行此代码,您可以在数据出现时触发它,并可以等待侦听输出并将其捕获为流文件属性。然后,您甚至可以根据响应的内容进行路由,等等

def flowFile = session.get()
if (flowFile == null) {
    return;
}
def procout = new StringBuffer(512), procerr = new StringBuffer(512)
def proc = "java -version".execute()
proc.consumeProcessOutput(procout, procerr)
proc.waitForOrKill(1000)
flowFile = session.putAttribute(flowFile, "Process Output", procout.toString())
flowFile = session.putAttribute(flowFile, "Process Error", procerr.toString())
session.transfer(flowFile, REL_SUCCESS)
如果您有更多问题,请告诉我们

谢谢
Joe

感谢Joe的宝贵意见,非常感谢。我会进一步研究这问题。如果我有任何问题,我会让你知道。干杯