一、规则引擎是什么?
官方解释:“规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。”
Thingsboard解释:Thingsboard平台的核心处理引擎,好比一台车子的发动机,是基于事件构建的工作流,是一个高度可定制的框架,用于复杂事件的处理。
二、Thingsboard 规则引擎能力是什么?
1、在设备数据(实时数据/属性数据)保存到数据库之前,支持对接收的遥测数据或属性数据进行拦截验证和修改;
2、将设备遥测数据(实时数据)或者设备属性从设备复制到相关资产,以便可以汇总遥测;
3、自定义告警规则/函数,进行设备告警触发、更新、清除;
4、根据设备生命周期事件触发操作。如设备上线、设备离线状态,创建告警事件;
5、加载所需的其他处理数据。在客户设备或租户属性中定义的设备的负载温度阈值;
7、发生复杂事件时发送电子邮件,并使用“电子邮件模板”中其他实体的属性;
8、根据定义的条件进行远程设备控制的RPC调用。
9、将设备实时数据、远程控制RPC指令,或者由规则引擎触发的告警或者事件,推送到与外部消息中间件或者第三方系统(如Kafka,MQTT,RabbitMQ, Spark,AWS服务等等)
简单的总结:能够用于接收任何事件,可以是来自设备的,设备生命周期事件、REST API事件、RPC请求等的传入;能够处理单个传入消息并生成一个或多个传出消息,发往不同的规则链路进行消息的路由处理,同时可以过滤,丰富,转换传入消息,执行操作或与外部系统通信。
三、规则引擎的组成有哪几部分?
1.规则消息(Message)
作用:用于接收任何事件,可以是来自设备的,设备生命周期事件、REST API事件、RPC请求等的传入
特点:可以被序列化的有着规定的数据结构,表示系统中的各种消息
消息组成:消息ID(MessageId),基于时间的通用唯一标识符;消息发起者(Originator of the Message),Device,Asset或者其他Entity标识符;消息类型(Type Of the Message),遥测或者不活动的事件;消息负载(Payload of the message),带有实际消息有效负载的json报文;元数据(Metadata),键值对的列表以及消息有关的其他数据。
消息类型:类型太多不一一列举。如有需要请私信。文档免费共享。
2.规则节点(Rule Node)
是什么?规则节点是规则引擎的基本组件,它一次处理单个传入消息并生成一个或多个传出消息。规则节点是规则引擎的主要逻辑单元。规则节点可以过滤,丰富,转换传入消息,执行操作或与外部系统通信。
作用:规则节点可以过滤,丰富,转换传入消息,执行操作或与外部系统通信。提供节点自定义能力,实现数据的运算。
节点间的关系:规则节点可能与其他规则节点相关。每个关系都有关系类型,这是用于标识关系的逻辑含义的标签。当规则节点生成传出消息时,它总是指定用于将消息路由到下一个节点的关系类型。
规则节点类型:
a、过滤节点(用于消息过滤和路由,过滤成功走真链、错误走假链)。示例1:script(脚本过滤器节点)使用javascript条件进行消息过滤(消息msg,metadata消息元数据,msgType消息类型);示例2:switch(交换节点)将传入消息路由到一个或多个输出链,节点执行已配置的JavaScript函数。
过滤节点:
b、属性集节点:用于更新传入消息的元数据。比如1:消息发起方用户属性(customer attributes),将消息发起方属性信息或者遥测数据加入Metadata元数据中。比如2:设备属性(device attributes),将消息发起方的设备属性或者遥测数据加入metadata。
属性集节点:
c、变换节点:用户更改创立的消息字段,比如,发起方、类型、有效负载,元数据。比如1:脚本转换节点(script),作用:修改消息内容(msg(消息负载),msgType(消息类型),metadata(元数据)),可增加,可改。比如2:转换到电子邮件节点(to email),通过使用从消息元数据派生的值填充电子邮件字段,将消息转换为电子邮件消息。设置“ SEND_EMAIL”输出消息类型,以后可以被“ 发送电子邮件节点”接受。可以将所有电子邮件字段配置为使用元数据中的值。
d、动作节点:根据传入的消息执行各种动作。
比如1:create alarm(创建告警),通过过滤节点中的过滤脚本判断后,对满足条件的消息进行告警的触发。
比如2:log(创建日志),对于系统中的关键系统进行日志输出,比如3:rpc call request(远程RPC调用),监控系统rpc请求,下发控制命令请求。
e、外部节点:提供将消息及数据路由到外部中间件,或者其他第三方云平台中。用于与外部系统进行交互。
实例1:kafka(kafka消息中间件),MQTT(外部MQTT代理),RabbitMQ,支持将系统中的数据发布到kafka/MQTT代理/RabbitMQ中,供第三方消费者订阅数据。
实例2:send email (向外部发送邮件)。
实例3:aws sns:将消息发布到aws sns(亚马逊简单消息通知服务,是一种发布\订阅模式的消息收发服务)。
3.规则链(Rule Chain)
是什么?规则链是规则节点及其关系的逻辑组。接收来自节点的出站消息将其发送至下一个节点。
用法:租户管理员可以定义一个“ 根”规则链,还可以定义多个其他规则链。根规则链处理所有传入的消息,并将其转发到其他规则链以进行其他处理。其他规则链也可以将消息转发到不同的规则链。
四、使用特点
组态化拖拽式布局编辑
每个规则节点可以具有取决于规则节点实现的特定配置参数。例如,“过滤器-脚本”规则节点可通过处理传入数据的自定义JS函数进行配置。
基于调试—事件模式的规则测试
每个规则节点可以设置为调试模式,启用之后,在事件中可以查看到入站-出站消息
JavaScript函数测试台
一些规则节点具有特定的UI功能,允许用户测试JS函数。单击“ 测试过滤器功能”后,您将看到JS编辑器,可使用该编辑器替换输入参数并验证函数的输出。
规则节点可自定义:
如果thingsboard现有的规则处理节点,无法处理有些定制化业务场景,比如:对于数据进行分类统计,或者分组统计、或者将数据推送到外部Hadoop生态去存储、或者将指定一段时间的数据,生成文件导出,推送到远程服务器上之类的小场景,可以通过自定义规则节点实现。官方预留扩展开发的接口,很容易构建自己的处理逻辑。
5、总结:
本次对于thingsboard的规则引擎的基本概念、可以使用的能力、规则引擎的组成,以及各个规则节点的用法、规则模型的使用特点做了简单的介绍。相信通过本次的讲解,对于规则引擎的基础、能力、用法有了大概的了解,具体的规则引擎的实战讲解,规划在设备物联接入之后,再进行演示。