首页 > 解决方案 > 带有滑动窗口示例的流口水规则

问题描述

我是 Drools 的新手,我正在尝试在 drool 中使用滑动窗口来获取少量传感器数据。我关注的文档是 https://docs.jboss.org/drools/release/7.47.0.Final/drools-docs/html_single/index.html#cep-sliding-windows-con_decision-engine

这是我的 POJO 课程:

package com.ruletemplate;

public class RuleTemplate {
private String DeviceName;
private String ParameterName;
private int ParameterValue;
private String AlertMessage; 

public RuleTemplate( String parametername )
{
    this.ParameterName = parametername;
}

public String getParameterName() {
    return ParameterName;
}
public void setPropertyName(String parametername) {
    this.ParameterName = parametername;
}

public int  getParameterValue() {
    return ParameterValue;
}
public void setParameterValue(int parametervalue) {
    this.ParameterValue = parametervalue;
}

public String getDeviceName() {
    return DeviceName;
}

public void setDeviceName(String devicename) {
    this.DeviceName = devicename;
}

public String getAlertMessage() {
    return AlertMessage;
}

public void setAlertMessage(String alertmessage) {
    this.AlertMessage = alertmessage;
}    
}

流口水引擎在 Azure Databricks 运行时版本 7.0 ML(包括 Apache Spark 3.0.0、Scala 2.12)上运行

流口水规则定义为:

import com.ruletemplate.RuleTemplate
rule 'Rule_Pump_Controller_Test_Device_12'
agenda-group 'Pump_Controller_Test_Device'
when
ruletemplate: RuleTemplate(ParameterName=='Voltage', ParameterValue > 0, ParameterValue < 
40)  over window:time(1m)
then
ruletemplate.setAlertMessage(ruletemplate.getDeviceName()+ ','+ 
ruletemplate.getParameterName() +', '+ruletemplate.getParameterValue()+ 
',3,Nodename,ActionsName');
end

触发规则的方式是:

val ruletemplate=new RuleTemplate(TelemetryName)
ruletemplate.setParameterValue(TelemetryValue.toInt)
ruletemplate.setDeviceName(Deviceid)
session.insert(ruletemplate) 
agenda.getAgendaGroup(Deviceid).setFocus();              
session.fireAllRules()

这在没有添加滑动时间窗口的情况下完美地工作。一旦添加滑动窗口,规则就会被评估但返回 null 。寻找一些帮助以获取示例或文档,了解我们如何在有限的时间长度内定义滑动窗口以及定义的那些以上(不累积)。

标签: drools

解决方案


推荐阅读