gpt4 book ai didi

java - Apache NIFI : Running a Java process directly after a file is added to a directory

转载 作者:行者123 更新时间:2023-12-03 19:23:10 25 4
gpt4 key购买 nike

我是 Apache NIFI 的新手。

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

我采用的方法是创建一个“GETFILE”处理器以从热文件夹中获取文件。然后创建一个 PUTFILE 处理器将其放入输入文件夹中。因此,您可以想象在“GETFILE”和“PUTFILE”处理器之间存在连接链路。这按预期工作。

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

根据上面的描述,有没有人可以推荐一种方法,让NIFI在检测到文件被添加到输入文件夹后触发Java应用程序运行?

谢谢。

最佳答案

您想要做的事情很有意义,我们实际上过去允许使用该处理器进行类似的操作。事实证明,虽然有足够多的边缘情况,但决定如何处理输入流文件变得相当成问题,所以我们有一个当前非常明确的模型,这基本上意味着处理器与 cron-scheduling 相结合是一个奇特的 cron-tool。

因此,我们已经转移到 NiFi 0.5.0 版本中,这应该会在几天内发布。因为我们有https://issues.apache.org/jira/browse/NIFI-210这是一个非常令人兴奋的功能,允许脚本针对内联流发生。 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)

如果您有更多问题,请告诉我们。

谢谢乔

关于java - Apache NIFI : Running a Java process directly after a file is added to a directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35208139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com