NiFi-1.0.0 - 加载 lua 脚本
Posted
技术标签:
【中文标题】NiFi-1.0.0 - 加载 lua 脚本【英文标题】:NiFi-1.0.0 - load lua script 【发布时间】:2017-03-08 17:17:12 【问题描述】:我有一个 NiFi 处理器,它使用 redislabs/luascript 库来加载 lua 脚本并在 redis 实例上执行它。
问题是我不知道将 lua 脚本放在哪里才能使用 luascript 库加载它。我已经把它放到了 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
有什么想法吗?
【问题讨论】:
哪些模块引入了 LuaScript 依赖项? 【参考方案1】:您能否分享有关处理器如何与库交互的更多信息?您是在传递 InputStream、调用可执行文件等吗?
确保您的资源位于处理器项目的 JAR 模块中,而不是处理器的 NAR 模块或父模块(包括两者)。您应该能够从处理器的 JAR 文件中的 Class 对象(例如处理器类本身)中使用 getResourceAsStream("lua/name.lua") 。我不确定你之后需要做什么,是否可以分享源代码或更多细节?
EDIT(回复下面的cmets):fromResource() 使用LuaScript's classloader 获取资源,不知它是否无权访问nifi-proc 或控制器服务资源。看起来,除非用户需要指定脚本的位置,否则控制器服务应该加载到 Lua 脚本中。因此,另一种方法是使用控制器服务类来获取 ResourceAsStream,将整个内容读入 String,然后使用 fromSource 而不是 fromResource。
【讨论】:
我实际上还有一个 nifi 控制器服务,以及一个使用该服务连接到 redis 实例的 nifi-proc。我已将 /lua/myscript.lua 放在 service 和 proc 资源文件夹中。我有一个方法可以将 lua 脚本加载到 redis 中并管理哈希。然后我想在给定一些键/参数的情况下执行 lua 脚本。 luascript lib: github.com/RedisLabs/luascript 加载方法:private LuaScript lua(String fpath, String redis_uri) throws IOException try ls = LuaScript.fromResource(fpath, redis_uri); catch(IOException ie) throw ie; return ls;
以上是关于NiFi-1.0.0 - 加载 lua 脚本的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Lua 脚本加载到 NodeMCU:无效的 node.chipid()
ESP8266 LUA脚本语言开发: 准备工作-LUA文件加载与变量调用