平台中内置了规则引擎,,均由规则引擎执行.
名词说明:
- RuleModel(规则模型):由多个,组成
- RuleNode(规则节点): 规则节点描述具体执行的逻辑
- RuleLink(规则连线): 用于将多个节点连接起来,将上一个节点的输出结果作为下一个节点的输入结果.
- Input(输入): 规则节点的数据输入
- Output(输出): 规则节点的数据输出
- Scheduler(调度器): 负责将模型转为任务(),并进行任务调度到
- Worker(工作器): 负责执行,维护任务.
- ExecutionContext(执行上下文): 启动任务时的上下文,通过上下文获取输入输出配置信息等进行任务处理.
- TaskExecutor(任务执行器): 具体执行任务逻辑的实现
- TaskExecutorProvider(任务执行器提供商): 用于根据模型配置以及上下文创建任务执行器.
- RuleData(规则数据): 任务执行过程中的数据实例
- 实现接口
- 在中配置Bean
脚本说明
脚本使用jsr223引擎, 通过调用内置变量handler.onMessage注册消息监听函数,当上游产生数据时,此函数将被调用,并传入数据.
例如:
通过指定输出数量值,可以控制输出到指定的节点,如:
你还可以通过上下文作用域保存,获取数据.
作用域
- ctx.scope(String id)或者ctx.scope(RuleData ruleData)上下文作用域,根据ruleData.contextId决定.
- ctx.node()当前节点作用域
- ctx.node(String id)指定节点作用域
- ctx.flow()当前流程作用域
- ctx.flow(String id)指定流程作用域
- ctx.flow(String id).node(String id)指定流程指定节点的作用域
- ctx.global()全局作用域
作用域支持方法:
- .all(String... key)获取指定key的数据,如果未指定这返回全部,类型为Mono<Map<String,Object>>
- .get(String key)获取指定key的数据,返回类型为Mono<Object>
- .put(String key,Object value)设置值,返回类型为Mono<Void>
- .putAll(Map<String,Object>)设置多个值,参数为Map,返回类型为Mono<Void>
- .clear()清空作用域,返回类型为Mono<Void>
- .counter()获取计数器
- .counter(String name)获取指定名字的计数器
- .counter().inc(double number)计数器递增,返回最新值:Mono<Double>
- .counter().dec(double number)计数器递减,返回最新值:Mono<Double>
- .counter().getAndSet(double number)获取最新值后设置新的值,返回:Mono<Double>
- .counter().setAndGet(double number)设置最新值后返回最新的值,返回:Mono<Double>
日志输出和错误处理
使用以下功能输出日志:
ctx.getLogger().debug("Log message {}",data); ctx.getLogger().warn("Warning"); ctx.getLogger().error("Error"); 使用以下功能触发错误:
throw new Error("错误"); throw new java.lang.RuntimeException("错误");
设备选择器说明
如果下发指令的设备是动态获取的,可使用表达式函数来获取设备并发送到对应到设备。
例如:
获取产品ID为demo-device的设备:
获取分组为demo-group下的设备:
获取当前设备相同分组下的设备:
获取标签supplier为测试厂商下的设备:
按状态筛选 :,状态:
函数的参数可以是固定的字符串,如:,也可以是上游节点传递的变量,如:
多个表达式使用,分隔,例如: