规则引擎可以被视为复杂的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/50548036jetlinks 规则引擎 , 基于流程的流式规则引擎, 功能强大, 满足业务场景需求, 但社区不怎么活跃, 代码仅部分开源, 且响应式的,不易集成,
camunda, 流程引擎, 适用传统的业务流处理
-
URule, 支持Web端的UI设计器,规则示例如下:
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/
界面如下: