NiFi-1.0.0 - 加载 lua 脚本
NiFi-1.0.0 - load lua script
我有一个 NiFi 处理器,它使用 redislabs/luascript 库来加载 lua 脚本并在 redis 实例上执行它。
问题是我不知道将 lua 脚本放在哪里才能使用 lua 脚本库加载它。我已将其放入 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
有什么想法吗?
您能否分享有关处理器如何与库交互的更多信息?您是否传入 InputStream、调用可执行文件等?
确保您的资源位于处理器项目的 JAR 模块中,而不是处理器的 NAR 模块或父级(包括两者)。您应该能够从处理器的 JAR 文件(例如处理器 class 本身)中的 Class 对象使用 getResourceAsStream("lua/name.lua")。我不确定在那之后你需要用它做什么,是否可以分享源代码或更多细节?
编辑(回复下面的评论): fromResource() 使用 LuaScript's classloader to get the resource, I wonder if it doesn't have access to the nifi-proc or controller service resources. It seems like, unless the user needs to specify the location of the script, that the controller service should be loading in the Lua script. So an alternative could be to use the controller service class to getResourceAsStream, read the whole thing into a String, and use fromSource 而不是 fromResource.
我有一个 NiFi 处理器,它使用 redislabs/luascript 库来加载 lua 脚本并在 redis 实例上执行它。
问题是我不知道将 lua 脚本放在哪里才能使用 lua 脚本库加载它。我已将其放入 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
有什么想法吗?
您能否分享有关处理器如何与库交互的更多信息?您是否传入 InputStream、调用可执行文件等?
确保您的资源位于处理器项目的 JAR 模块中,而不是处理器的 NAR 模块或父级(包括两者)。您应该能够从处理器的 JAR 文件(例如处理器 class 本身)中的 Class 对象使用 getResourceAsStream("lua/name.lua")。我不确定在那之后你需要用它做什么,是否可以分享源代码或更多细节?
编辑(回复下面的评论): fromResource() 使用 LuaScript's classloader to get the resource, I wonder if it doesn't have access to the nifi-proc or controller service resources. It seems like, unless the user needs to specify the location of the script, that the controller service should be loading in the Lua script. So an alternative could be to use the controller service class to getResourceAsStream, read the whole thing into a String, and use fromSource 而不是 fromResource.