Drools规则引擎-在微服务中的应用

需求

通过前端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)来触发规则.其他的不做多述.

Demo展示

源码链接:
----https://gitee.com/morphyguo/droolsdemo.git----

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容