我是Apache NIFI的新手.
我想设置一个流程,其中有一个文件可以放入"热文件夹".如果此文件夹检测到放入其中的文件,则此文件将被放入另一个名为"input"的文件夹中.将文件复制到输入文件夹后,我想触发Java程序运行.
我接近这个的方法是创建一个'GETFILE'处理器来从hot文件夹中获取文件.然后创建一个PUTFILE处理器将其放入输入文件夹.所以你可以想象'GETFILE'和'PUTFILE'处理器之间存在连接.这按预期工作.
然而,我面临的挑战是在文件被复制到INPUT文件夹时(即在执行PUTFILE处理器之后)触发我的Java进程运行.我无法在PUTFILE和EXECUTEPROCESS处理器之间创建链接(作为在将文件从hot文件夹复制到输入文件夹之后告诉NIFI运行Java进程的一种方法).我似乎无法在PUTFILE和EXECUTEPROCESS处理器之间获得连接箭头(因为NIFI不会让我).
基于以上描述,是否有人可以推荐一种方法来告诉NIFI在检测到文件被添加到输入文件夹后触发Java应用程序运行?
谢谢.
你想要做的事情很有意义,我们实际上习惯于允许与该处理器类似的东西.事实证明,虽然有足够的边缘情况,但是决定如何处理输入流文件变得相当成问题,因此我们有一个当前非常明确的模型,这基本上意味着处理器与cron-scheduling相结合是一个奇特的cron工具.
所以,我们转而采用的是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)
Run Code Online (Sandbox Code Playgroud)
如果您有更多问题,请告诉我们.
谢谢乔
| 归档时间: |
|
| 查看次数: |
1850 次 |
| 最近记录: |