|
drools 支持创建KIE session pool用于性能提升。
1.KIE session pool的创建
KieServices ks = KieServices.Factory.get();
KieContainer kc = ks.getKieClasspathContainer();
//1.从KieContainer创建初始量为10个session的池
KieContainerSessionsPool pool = kc.newKieSessionsPool(10);
//2.从池中获取kieSession
KieSession kieSession = pool.newKieSession();
//3.kieSession回收
kieSession.dispose();//pool 回收并重置 Kiesession
//4.pool的销毁
pool.shutdown();
//或者调用KieContainer 的dispose()方法关闭所有通过KieContainer创建的pools
//kc.dispose();
其中10表示pool中初始为10个session,可以根据自己的需要设置,pool中的session个数会根据需要动态增长。可以从pool中获取kiesession,当调用kiesession 的dispose()方法时,kiesession会重置并重新回收到pool中。
2.pool不仅可以用于创建stateful KIE sessions,同样适用于stateless KIE sessions。
StatelessKieSession sks = pool.newStatelessKieSession();
众所周知,stateless KIE session 每次调用excute()方法时,内部会创建stateful KIE session实例,并调用fireAllRules()和dispose()方法。但是,当适用同一个由pool获得的statelessKieSession执行excute时,内部只会从pool中获取KieSession。
3.实际kiesession的创建并不耗时,drools只有创建KieBase时最耗时,毕竟所有的规则资产都包含在了kieBase里。这也不是绝对的啊,运行数据量打到几百万的时候也可能会成遇到瓶颈,到时候可以试试KIE session pool。 |