使用drools流模式时内存下降

时间:2015-05-15 10:54:18

标签: memory drools complex-event-processing

我使用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);
    }
    // ....
}

1 个答案:

答案 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{....}