2016-10-26 45 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