需求
通过前端UI界面可以灵活配置规则
实现
技术栈
项目中使用到drools规则引擎来对大数据平台的实时数据流进行分析.
实现技术栈:
- spring boot/cloud(微服务)
- angularjs+g6(前端)
- drools(规则引擎)
- kafka相关
- quartz或akka(实现分布式异步任务调度)
整体框架
业务实现
- 前端通过蚂蚁G6组件实现规则编辑
- 微服务解析前端UI json生成drl脚本.
- 使用quartz或akka任务调度,里面包含了规则引擎的执行过程,处理来着kafka的消息
- 使用spring kafka组件接收来自集群的数据流.
规则引擎相关代码示例如下:
public KieSession newKieSession(RuleModel rule) {
StringBuffer rulebuffer = new StringBuffer();
rulebuffer.append(rule.getDrl());
if (!checkRule(rulebuffer.toString())) {
return null;
}
KieHelper helper = new KieHelper();
helper.addContent(rulebuffer.toString(), type);
KnowledgeBaseImpl kieBase = (KnowledgeBaseImpl) helper.build();
StatelessKieSession kieSession = kieBase.newStatelessKieSession();
return ((StatelessKnowledgeSessionImpl) kieSession).newWorkingMemory();
}
private boolean checkRule(String rule) {
try {
KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();
kb.add(ResourceFactory.newByteArrayResource(rule.getBytes("utf-8")), ResourceType.DRL);
if (kb.hasErrors()) {
log.warn(kb.getErrors().toString());
return false;
}
return true;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return false;
}
}
有了session,就可以通过事实(fact)来触发规则.其他的不做多述.
网友评论