1、今天我們一起來學習下處理器RouteOnAttribute,此處理器的作用是根據屬性值進行路由進而來控制數據流的走向。類似於java中的if-else或者switch-case。如下圖所示。
GenerateFlowFile 產生測試數據,{"name":"Javax 小金剛","id":"2"}
JoltTransformJSON 轉換json結構:{"person":{"name":"Javax 小金剛","id":"2"}}
EvaluateJsonPath 提取指定字段userId,不瞭解EvaluateJsonPath 可以參考上篇文章
RouteOnAttribute 根據userId屬性進行路由,爲了演示方便這裏僅僅是判斷userId=1路由到LogMessage-1,userId=2路由到LogMessage-2,其他數據路由到LogMessage-default
2、RouteOnAttribute處理器功能很明顯,根據flowFile的屬性進行路由,如下圖所示。
Routing Strategy:路由策略,有Route to Property name(本次演示選擇此路由策略) 、Route to 'matched' if all match 、Route to 'matched' if any matches 三個選項。
Route to Property name :針對一條路由規則進行控制,如userId=1時路由到LogMessage-1,相當於java中的switch-case。
Route to 'matched' if all match :針對多條路由規則進行控制,如userId=1並且name=Java小金剛路由到LogMessage-xxx,相當於java中的if(userId.equals('1')&&name.equals('Java小金剛')){print('我路由到LogMessage-xxx')}
Route to 'matched' if any matches :針對多條路由規則進行控制,如userId=1或者userId=100路由到LogMessage-kkk,相當於java中的if(userId.equals('1')||name.equals('Java小金剛')){print('我路由到LogMessage-kkk')}
點擊+號進行添加路由規則,可以添加一條或者多條。value支持el表達式,el表達式後續專題講解。
3、雙擊RouteOnAttribute和LogMessage中間的連線,配置關聯關係,此時RouteOnAttribute中配置的test1、test2路由條件會在這裏顯示,同時還會有一個unmatched選項處理未匹配默認值。
當Routing Strategy路由策略選擇Route to Property name時,test1、test2、unmatched三個選項只勾選一個。相當於switch-case,多路分支。
選擇Route to 'matched' if all match 或者Route to 'matched' if any matches 之後connection 連線配置的關聯選項只有matched和unmatched兩個選項,如userId=1或者userId=100路由到LogMessage-kkk,相當於java中的if(userId.equals('1')||name.equals('Java小金剛')){print('我路由到LogMessage-kkk')}
4、LogMessage處理器,該處理器作用是記錄日誌,相當於kettle中的寫日誌步驟。設置比較簡單,這裏不做過多介紹。
5、下圖爲處理器LogMessage打印的日誌信息,在日誌文件nifi-app.log 中查看。