我使用Drools 6.2.Final Fusion CEP,我设置了事件@expires(1d),但我发现几天后memery一直在下降。每天事件数据的总数并不多。我怀疑在到期后工作中的事件不明确。所以我想确认一下:
1.Fusion CEP流模式有状态会话必须在fireAllRules()之后dispose()吗?在我的代码中,ksession将只在init方法创建一次,然后使用它插入一个事件并触发所有规则,但我从未在fire之后使用dispose()方法。我担心的不是我没有使用导致事件被保存在内存中的方法。
2.到期后的事件会自动从内存中删除吗?我担心事件没有被正确清除,导致内存一直在下降。
@org.kie.api.definition.type.Role(org.kie.api.definition.type.Role.Type.EVENT)
@org.kie.api.definition.type.TypeSafe(true)
@org.kie.api.definition.type.Timestamp("beginTime")
@org.kie.api.definition.type.Expires("1d")
public class Event{
private Long beginTime;
// ...other fields, set and get method..
}
-
poublic void initKsession()throws Exception{
KieServices kieServices = KieServices.Factory.get();
KieBaseConfiguration config = KieServices.Factory.get().newKieBaseConfiguration();
config.setOption(EventProcessingOption.STREAM);
ReleaseId releaseId = kieServices.newReleaseId(groupId, artifactId, version);
KieContainer kContainer = kieServices.newKieContainer(releaseId);
KieScanner kScanner = kieServices.newKieScanner(kContainer);
kSession = kContainer.newKieSession(kessionName);
kScanner.start(10000L);
}
-
public Result processRules(Event event) {
// ....
try {
kSession.insert(event);
kSession.fireAllRules();
} catch (Exception e) {
log.error("fail",e);
}
// ....
}
答案 0 :(得分:1)
在测试之后,我发现为什么事件没有被正确删除。我需要在这样的规则中声明@expires:
declare Event
@role(event)
@timestamp(beginTime)
@expires(2m)
end
如果我在类Event上面添加注释,则注释不会生效。
@org.kie.api.definition.type.Timestamp("beginTime")
@org.kie.api.definition.type.Expires("1d")
public class Event{....}