我正在使用 Spring AMQP 从 RabbitMQ 读取消息。读取消息后,将其反序列化为一个标头(父)对象和多个详细信息(子)对象。然后将这些事实插入 Drools 无状态规则会话。最后,更新的事实被插入到数据库中。
我有几个规则将使用收集或累积函数聚合详细事实。这是一个例子。
rule "Header.TotalDuration"
when
h : BresHeader()
n : Number()
from accumulate( d : BresDetail(willSendToInvoice==true,
uniqueConfID == h.uniqueConfID),
sum(d.Duration) )
then
h.TotalDuration = new Integer(n.longValue());
System.out.println("[TotalDuration] rule ran");
end
如果我在 jUnit 中运行一次(读取一条消息),则 TotalDuration 计算正确。如果我在 tomcat 中运行它(连续读取消息), TotalDuration 的值不正确,并且在每次传递后都会增加(消息被抓取,规则运行,事实持续存在,重复),我不知道为什么。
任何人都可以阐明这种行为吗?