将ApacheNiFi和RuleEngine结合起来很容易,也很有趣。您可以使用数据操作完成一些非常好的工作,我使用Drools为此编写了一些代码。

构建或下载规则引擎
下载编译后的NiFi NAR这里或从https://github.com/alefbt/NiFi-Rule-engine-processor

这目前只适用于JSON流文件。

(许可证:Apache 2)

NiFi-Rule-engine-processor github

然后运行以下命令:

git clone https://github.com/alefbt/NiFi-Rule-engine-processor
cd NiFi-Rule-engine-processor
mvn clean install package
cp nifi-ruleengien-processor-nar/target/nifi-ruleengien-processor-1.0.nar /path-to-nifi/lib/
重新启动NiFi。


创建一个NiFi流
GetFile处理器
SET属性`源文件夹‘:/some-project-path/IN
RuleEngineProcessor
设置属性DRL file path到/some-project-path/DRL/business_object_json_test1.drl
PutFile处理器
将财产“最大折页”设置为/some-project-path/OUT
Image title

创建文件和相关文件夹
Image title

创建DRL文件/some-project-path/DRL/business_object_json_test1.drl

package com.matrixbi.rules 
 import com.matrixbi.objects.BusinessObject 
 rule “Good Morning” 
 when 
 b: BusinessObject() 
 eval( b.getAsInt(“time”) < 12 ) 
 then 
 b.set(“greet”,”G00d Morning ” + b.get(“name”)); 
 end 
 rule “Good Afternoon” 
 when 
 b: BusinessObject() 
 eval(b.getAsInt(“time”) >=12 && b.getAsInt(“time”) < 16) 
 then 
 b.set(“greet”,”Good Afternoon ” + b.get(“name”)); 
 end 
 rule “Good Night” 
 when 
 b: BusinessObject() 
 eval(b.getAsInt(“time”) >= 16) 
 then 
 b.set(“greet”,”Good Afternoon ” + b.get(“name”)); 
 end


创建一个JSON测试文件/some-project-path/IN/business_object_json_test1.json

{ 
 “time”: 11, 
 “greet”: “Default text”, 
 “name”:”Yehuda” 
 }


激活所有并运行它。

结果
过了一会儿,你该看看business_object_json_test1.json在.。/some-project-path/OUT文件夹文件。

Image title

来源

Image title结果

Image title