规则引擎选型

规则引擎可以被视为复杂的if / then语句解释器。被解释的if / then语句称为规则,规则的if部分用于处理条件,比如account.getMoney() < 0;规则的then部分包含执行的操作,比如sendWarning(account)。

业务上规则引擎的使用主要包括如下两部分:

1、数据转发

支持以写SQL的方式和web端流程配置的方式,实现IOT平台数据的转发,支持对数据按照产品key、设备key、产品标签、设备标签, 以及topic 来过滤。

2、场景联动

支持IOT设备间的联动,比如:当室内温度大于30℃的时候,自动开启空调。主要包括:触发条件配置、执行条件配置、执行动作配置三部分。

目前主流的规则引擎:

  • Drools, java 实现, 较轻量, 且支持动态加载, 但不支持通过SQL定义规则,
    参考连接:
    https://www.drools.org/
    https://www.jianshu.com/nb/50548036

  • jetlinks 规则引擎 , 基于流程的流式规则引擎, 功能强大, 满足业务场景需求, 但社区不怎么活跃, 代码仅部分开源, 且响应式的,不易集成,

  • camunda, 流程引擎, 适用传统的业务流处理

  • URule, 支持Web端的UI设计器,规则示例如下:


    image.png
  • Easy Rules, 基于POJO的开发,

@Rule(name = "Hello World rule", description = "Always say hello world")
public class HelloWorldRule {

    @Condition
    public boolean when() {
        return true;
    }

    @Action
    public void then() throws Exception {
        System.out.println("hello world");
    }
}


public class Launcher {

    public static void main(String[] args) {

        // create facts
        Facts facts = new Facts();

        // create rules
        Rules rules = new Rules();
        rules.register(new HelloWorldRule());

        // create a rules engine and fire rules on known facts
        RulesEngine rulesEngine = new DefaultRulesEngine();
        rulesEngine.fire(rules, facts);

    }
}

  • NodeRed, 一种编程工具,用于以新颖有趣的方式将硬件设备,API和在线服务连接在一起。
    它提供了一个基于浏览器的编辑器,使得我们可以轻松地使用编辑面板中的各种节点将流连接在一起,只需单击即可将其部署到其运行时。 由IBM构建的可视化物联网编排工具, 可以看得出 jetlinks 的规则引擎即基于该项目实现,

优点:
可视化,直接在浏览器拖拽创建Flow
平台可使用模块丰富
支持http,mqtt,websocket,tcp,utp协议
使用Nodejs事件驱动的非阻塞模型,非常适合在低成本硬件运行
完全开源,可以自主开发, 不过后端也是基于nodejs 开发的

参考连接:
https://nodered.org/

界面如下:


image.png

你可能感兴趣的:(规则引擎选型)