2016-12-05 327 views
0

我們的要求是根據條件拆分流量數據。 我們認爲使用「ExecuteStreamCommand」處理器(實習者將使用java類),但它只給出單流數據文件。我們希望有兩個流量數據文件,一個用於匹配,另一個用於不匹配的標準。Apache NiFi根據條件拆分數據

我查看了「RouteText」處理器,但沒有使用Java類作爲其一部分的功能。

讓我知道是否有人有任何建議。

+3

什麼是條件,爲什麼你需要使用java類? – JDP10101

+0

嗨,如果指定位置的特定字符串是「ABC」,那麼我必須將該消息移動到一個卡夫卡主題其他主題。 Soi希望從數據庫中動態獲取字符串「ABC」並檢查,未來我們可能會添加更多不同的命令類型。 –

+0

用其他術語表示,您有一個傳入的FlowFile。您想要使用數據庫查詢的結果來檢查結果是否包含在特定位置的FlowFile的內容中。然後基於它是否是路由。它是否正確?你還使用什麼「DB」?最後,輸入FlowFile的內容是否是特定的格式? – JDP10101

回答

0

我認爲你可以使用GetMongo閱讀這些定義值,並將其存儲在由DistributedMapCacheClientService訪問的地圖,然後用RouteOnContent路由基於檢索值的缺席/存在傳入flowfiles。

如果不工作,你可以改爲路線查詢結果從GetMongoPutFile然後用ScanContent,從文件系統和路徑上的字典文件中讀取flowfiles基於無/這些關鍵字的存在內容。

最後,如果一切都失敗了,您可以使用ExecuteScript將這些步驟合併到單個處理器中並路由到matched/unmatched關係。它很容易處理Groovy代碼,所以如果需要的話,你可以直接調用你現有的Java類。

+0

第一個不工作。所以在第二種選擇中,我們如何訪問「目錄文件」中的mongo數據?我需要 僅供參考,Input to ScanContent是Mongo和ListeningPort。 –

+0

您必須將Mongo查詢的結果寫入存儲在磁盤上的平面文件,並且根據查詢的輸出格式,也許可以使用「ReplaceText」將其正確格式化。然後,使用'PutFile'的輸出路徑作爲RouteOnContent的字典文件路徑,以便它讀取這些定義。 – Andy