流口水规则在压力测试期间开始触发

时间:2019-02-07 11:45:13

标签: drools rule-engine stress-testing

我们有一条规则,当客户拥有特定的产品代码时,需要触发该规则,最初,我们将规则指定如下:

rule "DENTAL"

    when
        $bill : Bill ( $client : Client != null )
        Client ( (productCode/1000) >= 102 && (productCode/1000) < 103 ) from $client
    then
        $bill.add(13300);

end

在压力测试期间,我们发送的productCode处于101范围内。该规则直到某个时刻开始反复射击才达到预期。日志(=“ then”中的System.out)清楚地表明所计算的(productCode / 1000)productCode为101。

我们将规则更改为:

rule "DENTAL"

    when
        $bill : Bill ( $client : Client != null )
        Client ( productCode >= 102000 && productCode < 103000 ) from $client
    then
        $bill.add(13300);

end

总体而言,这似乎是对规则的更好定义,并且可以预期该规则在压力测试期间已停止触发。

也许第一个规则是不良编码的一个示例,我们不应该出于特定原因在该规则中应用除法,但我正在寻求对此的确认。也许这与奇迹有关。也许有人可以阐明一些想法。

有关框架的一些细节:

  • 仅在无状态会话中评估规则
  • 仅一个Bill对象插入无状态会话中
  • 每个账单只有一个客户
  • 一个假设是productCode 属性始终具有6位数字(在第一个定义中为productCode 0会引发错误)。
  • KIE / Drools 6.5.0版
  • 项目使用JDK6编译,并在IBM WAS7上运行。
  • 创建KieBase对象一次,然后从IBM缓存中检索。

我们将迁移到WildFly和JDK8,因此本地JMeter测试是在具有JDK8和Java缓存的WildFly 10.1.x上进行的。通过这些设置,我们在规则上没有遇到任何问题。

在此先感谢您的帮助。

0 个答案:

没有答案