我的 DRL 文件:
package com.sample.eventmanagement;
import com.sample.eventmanagement.CheckInEvent
import com.sample.eventmanagement.LateCheckInEvent
global java.util.concurrent.BlockingQueue lateCheckInEntitiesQueue;
global java.util.concurrent.BlockingQueue clearingLateCheckInEntitiesQueue;
declare CheckInEvent
@role(event)
serialNum : String
currentCheckInTime : long
end
declare LateCheckInEvent
@role(event)
@expires( 120m )
serialNum : String
currentCheckInTime : long
end
rule "Raising an Late Check-In Alert"
when
$s1: CheckInEvent( $serialNum : serialNum, $currentCheckInTime: currentCheckInTime ) from entry-point apCheckInStream
not( CheckInEvent( serialNum == $serialNum, currentCheckInTime > $currentCheckInTime, this after[ 1s, 360s ] $s1 ) from entry-point apCheckInStream)
then
lateCheckInEntitiesQueue.add($s1);
end
rule "Clearing Late Check-In Alert"
when
$s1: LateCheckInEvent( $serialNum : serialNum, $currentCheckInTime: currentCheckInTime ) from entry-point lateApCheckInStream
CheckInEvent( serialNum == $serialNum, currentCheckInTime > $currentCheckInTime) from entry-point clearingApCheckInStream
then
System.out.println("Clearing late checkin " + $s1);
clearingLateCheckInEntitiesQueue.add($s1.getSerialNum());
end
我在 linux vm 的 karaf 2.4.3 中以流模式运行 drools,每 5 分钟报告一次 10k 实体检查事件的内存不足。
我的用例是检测由序列号标识的实体的延迟检查事件。延迟签入事件检测到将该事件泵入另一个规则并在 2 小时内等待该实体再次正确签入。如果发生这种情况,则触发规则 2。
我编写查询的方式有什么问题吗??