首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Drools融合时间滑动窗口

基于Drools融合时间滑动窗口
EN

Stack Overflow用户
提问于 2015-08-17 12:38:05
回答 1查看 463关注 0票数 0

我无法理解JBoss Drools推理引擎是如何处理复杂事件处理(drools融合)的。实际上,我创建了一个规则,以便在少于5秒的时间内,如果超过2个事务,就会拒绝一个事务。这是规则

代码语言:javascript
复制
rule "more than 2 transaction in 5 seconds"
  when
    $transaction : Transaction( $id : id )
    Number(intValue > 2) from accumulate(
        $t : Transaction() over window:time(5s),
        count($t))

then
   $transaction.setDenied(true);
end

我使用伪会话时钟以流模式设置会话。这里的java代码

代码语言:javascript
复制
SessionPseudoClock clock = kSession.getSessionClock();
Transaction tx1 = new Transaction(new BigInteger("10000"), TransactionType.CREDIT_CARD, 1L);
Transaction tx2 = new Transaction(new BigInteger("2000"), TransactionType.CREDIT_CARD,2L);
Transaction tx3 = new Transaction(new BigInteger("50000"), TransactionType.DEPOSIT,3L);
Transaction tx4 = new Transaction(new BigInteger("100"), TransactionType.WITHDRAW,4L);

assertTransaction(kSession, tx1);

clock.advanceTime(6, TimeUnit.SECONDS);
assertTransaction(kSession, tx2);

clock.advanceTime(3, TimeUnit.SECONDS);
assertTransaction(kSession, tx3);

clock.advanceTime(1800, TimeUnit.MILLISECONDS);
assertTransaction(kSession, tx4);

其中assertTransaction simple包含以下代码:

代码语言:javascript
复制
kSession.insert(tx);
kSession.fireAllRules();

触发规则匹配的事务是tx4,因为tx2发生在tx1和tx1脱离定时窗口后的6秒。奇怪的是,规则的操作对工作内存中的所有事务执行,甚至对于tx1也是如此。

它应该这样工作吗?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-17 13:32:36

主要问题是引擎没有机会执行挂起的激活,并根据当前对(伪)时钟的读取来处理事实。此外,该规则将触发当前在工作内存中的每个事务,而您希望它只为最新的事务触发。

对于CEP、测试或生产,我建议在一个单独的线程中运行引擎,调用fireUntilHalt。然后,对于测试或生产,您可以使用真正的时钟和插入事实,因为他们来自或从线程之间的插入暂停。并且,伪时钟也可以使用,几乎没有任何变化的代码。

若要确保规则仅对最近的线程触发,请将规则更改为

代码语言:javascript
复制
rule "more than 2 transaction in 5 seconds"
when
    $transaction : Transaction( $id : id )
    not Transaction( this after $transaction )
    Number(intValue > 2) from accumulate(
        $t : Transaction() over window:time(5s),
        count($t))
then
    System.out.println( "denied: " + $transaction );
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32050634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档