2016-10-26 48 views
1

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

问题是,我不知道在哪里放置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

任何想法?

+0

哪个模块引入了LuaScript依赖关系? – mattyb

回答

2

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

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

编辑(回复如下评论):fromResource()使用LuaScript's classloader获取资源,我不知道,如果它没有进入nifi个处理器或控制器的服务资源。看起来,除非用户需要指定脚本的位置,否则应该在Lua脚本中加载控制器服务。因此,另一种方法是使用控制器服务类来getResourceAsStream,将整个事物读入字符串,并使用fromSource而不是fromResource。

+0

我实际上也有一个nifi控制器服务和一个使用该服务连接到redis实例的nifi-proc。我已经将/lua/myscript.lua放在了服务和proc资源文件夹中。 我有一个将lua脚本加载到redis中并管理散列的方法。然后我想执行一些键/参数的lua脚本。 – bsd

+0

luascript LIB:https://github.com/RedisLabs/luascript 用于加载方法: '私人LuaScript LUA(字符串fpath,字符串redis_uri)抛出IOException异常{ 尝试{ LS = LuaScript.fromResource(fpath,redis_uri ); catch(IOException ie){ throw ie; } catch(IOException ie) } return ls; } ' – bsd