在一个时间范围内检测到一定数量的事件,但只触发一次

时间:2018-06-12 11:30:09

标签: drools drools-fusion drools-kie-server

需要一条规则,在某个时间范围内(此处为10秒)发出一定数量的BootNotifications(此处为2)时会发出警报。

我提出了以下规则:

rule "MonitorNumberOfReboots"
dialect "mvel"
when
    $s : BootNotification()
    Number( intValue >= 2 ) from accumulate ( BootNotification() over window:time (10s), count(1)) 
    not (Command(this before [0s, 1h] $s )) 
then
    Command $c = new Command();
    insertLogical( $c );
    end

进一步解释:

  • Kie-Engine正在"有状态","流","实时"和平等"模式

测试:

  • 我通过添加一个间隔>的BootNotification来测试规则。 10s =>规则不会触发=>检查
  • 我通过添加BootNotification来测试规则,间隔为2s =>规则多次触发=>失败

问题/问题:

我不希望规则多次开火。当规则触发时,我插入一个命令。在when子句中,我添加了一个检查命令是否存在。我希望规则在1小时内不会超过一次。它不起作用。即使在10秒之后它也会继续插入Command实例。

我认为问题可能发生在[0s,1h] $ s"之前的问题。在when子句的第三行,所以我用

替换它
not (Command() over window:time (1h)) 

但每2秒添加一次BootNotifications时,它会更频繁地触发。

0 个答案:

没有答案