Drools 性能作为使用多线程的规则引擎

Sha*_*ank 5 java rule-engine drools business-rules kie

我正在使用单线程 drools 项目作为第一匹配策略/条件评估引擎。我正在使用以下代码从 kieContainer 获取 kieSession,并根据条件评估谓词。

KieContainer currentContainer = kieContainer.get();
StatelessKieSession newKIESession = currentContainer.newStatelessKieSession();
newKieSession.execute(predicate);
Run Code Online (Sandbox Code Playgroud)

对于给定的请求,评估大约需要 10 毫秒。但是,当我使用 10 个线程时,为了提高性能,这些请求中的每一个都开始花费大约 100 毫秒,有效地为我提供了相同的性能和更多的线程。

  1. 在 Drools 中使用多线程改进条件评估的正确方法是什么?
  2. 我应该为每个处理线程生成一个新容器,而不是从现有容器生成一个新会话吗?

    //SEE LAST LINE BELOW
    
    KieServices ks = KieServices.Factory.get();
    KieRepository kr = ks.getRepository();
    KieFileSystem kfs = ks.newKieFileSystem();
    
    byte[] drlAsBytes = retrieveDRLResource();
    kfs.write(ResourceFactory.newByteArrayResource(drlAsBytes).setTargetPath(DROOLS_DEFAULT_PATH));
    
    KieBuilder kb = ks.newKieBuilder(kfs);
    
    kb.buildAll(); // kieModule is automatically deployed to KieRepository if successfully built.
    
    if (kb.getResults().hasMessages(Level.ERROR)) {
        throw new PolicyServiceException("Build Errors:\n" + kb.getResults().toString());
    }
    
    //******* SHOULD THIS BE DONE FOR EACH PROCESSING THREAD? ******
    KieContainer newkieContainer = ks.newKieContainer(kr.getDefaultReleaseId());
    
    Run Code Online (Sandbox Code Playgroud)

我正在使用以下版本的 DROOLS。

    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>7.2.0.Final</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)