首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Drools融合有“现在”的概念吗?

Drools融合有“现在”的概念吗?
EN

Stack Overflow用户
提问于 2011-01-14 14:09:35
回答 1查看 1.9K关注 0票数 6

我正在试图写一条规则,延迟射击,至少,15分钟后,已经过去了上次射击。然而,Drools融合中的时态算子只允许对两个事件之间的关系进行推理,而不允许对当前时间中的一个事件进行推理。

我想要这样的:

代码语言:javascript
复制
rule "some rule"
when
    not LastFiredEvent(this before[0m, 15m] NOW)
    …

我已经诉诸于编写一条规则,它每秒钟触发一次并插入心跳事件(也可以撤回前一次心跳),我可以在其他规则中使用该规则作为当前时间。

我觉得这很不雅致;我是遗漏了什么,还是Drools Fusion真的没有这方面的东西?

注意:我并不是在寻找延迟的规则或规则,这些规则或规则只能在15分钟的倍数上触发;如果在过去17分钟内没有发生任何事情,规则必须立即开火以响应新事件。

EN

回答 1

Stack Overflow用户

发布于 2011-01-17 08:20:49

虽然"NOW“的概念一开始看起来可能很简单,但它并不简单,因为它是模棱两可的,取决于它根据运行环境可以采取的不同语义。Drools在以流模式运行时,确实有一个“立即”的概念,但是它与上面所问的不同。这里的解释有点长,所以让我们关注一下您的问题。

首先,你说:“我在试图写一条延迟解雇的规则.”然后你说:“我不是在寻找延迟解雇的规则.”,所以我对你需要什么感到困惑。

如果您想延迟规则,可以使用timer属性:

代码语言:javascript
复制
rule X
   timer( int: 15m )
...

如果要触发规则以防止事件在间隔内发生或没有发生,则可以使用滑动窗口。例如:

代码语言:javascript
复制
rule "Event did not happen in the last 15m"
when
   not( SomeEvent() over time:window(15m) )
...

希望这能有所帮助。和BTW,试着把你的问题张贴到流口水邮件列表,因为这将使你更容易得到一个答案。我看到你的帖子只是因为一个朋友对我吹毛求疵。

干杯,埃德森

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4691895

复制
相关文章

相似问题

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