NiFi-1.0.0 - 加载lua脚本

时间:2016-10-26 11:03:15

标签: java lua redis apache-nifi

我有一个NiFi处理器,它使用redislabs / luascript lib来加载lua脚本并在redis实例上执行它。

问题是我不知道在哪里放置lua脚本以便使用luascript lib加载它。我把它放到了nifi_proc / src / main / resources / lua / name.lua中,但是我得到了一个IOException。

我有一个用于连接redis的nifi控制器服务和使用该服务的处理器。

我的项目结构: . ├── nifi-bundle-nar │   └── target ├── nifi-redis_cservice │   ├── src │   └── target ├── nifi-redis_cservice-api │   ├── src │   └── target ├── nifi-redis_cservice-api-nar │   └── target ├── nifi-redis_cservice-nar │   └── target ├── redis-processors │   ├── src │   └── target └── target └── maven-shared-archive-resources

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以分享有关处理器如何与库交互的更多信息吗?你是否传入一个InputStream,调用可执行文件等?

确保您的资源位于处理器项目的JAR模块中,而不是处理器的NAR模块或父级(包括两者)。您应该能够从处理器的JAR文件中的Class对象(例如处理器类本身)使用getResourceAsStream(" lua / name.lua")。我不确定您之后需要做什么,是否可以分享源代码或其周围的更多细节?

编辑(回复以下评论):fromResource()使用LuaScript's classloader获取资源,我想知道它是否无法访问nifi-proc或控制器服务资源。除非用户需要指定脚本的位置,否则似乎控制器服务应该在Lua脚本中加载。因此,另一种方法是将控制器服务类用于getResourceAsStream,将整个事物读入String,并使用fromSource而不是fromResource。