需要一个规则,如果在特定时间范围内(此处为 10 秒)发生一定数量的 BootNotification(此处为 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 以“有状态”、“流”、“实时”和“平等”模式运行
测试:
- 我通过添加间隔 > 10 秒的 BootNotification 来测试规则 => 规则不会触发 => 检查
- 我通过添加间隔为 2 秒的 BootNotification 来测试规则 => 规则触发多次 => 失败
问题/问题:
我不希望规则多次触发。当规则触发时,我插入一个命令。在 when 子句中,我添加了一个检查 Command 是否存在。我希望该规则在 1 小时内不会触发超过一次。它不起作用。即使在 10 秒后,它也只是继续插入 Command 实例。
我认为问题可能是我在 when 子句的第三行中的“this before [0s, 1h] $s”,所以我将其替换为
not (Command() over window:time (1h))
但是当每 2 秒添加一次 BootNotifications 时,它会更频繁地触发。