问题标签 [drools-fusion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
drools - 从工作记忆中检索特定类型的事实
我需要从工作记忆中检索特定类型的事实,而不是检索所有事实。
我了解到我可以从工作记忆中检索所有事实,如下所示。
请提供一些指针以从工作内存中检索特定类型的对象。
drools - 在规则条件下使用撤回的问题
我正在尝试编写一个规则来检测给定事件是否在最后“m”时间段内发生了“n”次。我正在使用drools 5.4.Final 版。我也试过 5.5.Final 没有效果。
我发现有几个条件元素,正如 Drools 所说的,积累和收集。我在下面的示例规则中使用了收集
结尾
注入日志的代码如下。该代码每 3 秒注入一次日志并触发规则。
有了这个,我可以实现的是在最后 10 秒内检查上述 LogMessage 的存在。我还可以找出触发规则的最后 10 秒内发生的确切 LogMessage 集。
问题是,一旦处理了这些消息,它们就不应参与下一个评估周期。这是我无法实现的。我将举例说明这一点。
考虑下面的时间线,时间线显示日志消息的插入和应该发生的警报生成状态。
预期结果
秒-- 日志 -- 警报
0 -- LogMessage1 -- 无警报
3 -- LogMessage2 -- 无警报
6 -- LogMessage3 -- Alert1 (LogMessage1, LogMessage2, LogMessage3)
9 -- LogMessage4 -- 无警报
12 -- LogMessage5 -- 无警报
15 -- LogMessage6 -- Alert2 (LogMessage4, LogMessage5, LogMessage6)
但是当前代码发生的事情是
实际结果
秒 -- 日志 -- 警报
0 -- LogMessage1 -- 无警报
3 -- LogMessage2 -- 无警报
6 -- LogMessage3 -- Alert1 (LogMessage1, LogMessage2, LogMessage3)
9 -- LogMessage4 -- Alert2 (LogMessage2, LogMessage3, LogMessage4)
12 -- LogMessage5 -- Alert3 (LogMessage3, LogMessage4, LogMessage5)
15 -- LogMessage6 -- Alert4 (LogMessage4, LogMessage5, LogMessage6)
本质上,我无法丢弃已处理并参与警报生成的消息。我尝试使用retract从其工作记忆中删除已处理的事实。但是当我在规则的then部分添加retract 时,规则完全停止触发。我无法弄清楚为什么添加retract后规则停止触发。
请让我知道我哪里出错了。
drools - Drools 时间规则
我是 Drools 的新手。如果进程运行时间超过一段时间,我正在尝试生成通知 - 比如说 5 分钟。
为了实现上述目的,我在 DRL 文件中编写了以下代码。但这似乎不起作用。
.drl 文件
在上面的.drl
文件中,我有一个名为Message
声明的事件。该规则正在检查是否msgtext
存在1st message
并且它正在运行 5 分钟 - 如果是这种情况,我必须生成一个通知。在这个例子中,我只是打印结果。
提前致谢。我感谢您的帮助。
drools - Drools 事件到期问题
我们目前正在使用 drools 5.1 版本。我们希望在某个时间后过期事件。我们正在尝试以下方法。
我们在规则中使用了累积函数。并观察到实例没有从工作内存中收回(过期)。我总是得到相同的事实计数。
是否有任何指针可以在某个时间后使事件过期。
我们已经尝试了 5.3 并观察到在 CEP 和具有累积功能的规则的情况下到期未按预期工作。
请提供解决问题的指示。
java - 在 changeset.xml 中指定多个 drl 目录
目前使用 drools 5.1.1。如果我尝试使用变更集配置多个带有 drls 的目录。我观察到最后一个目录正在被 drools 扫描。这种行为是否正确?我的要求是我需要配置多个 drl 目录。如果有任何替代方案,请提供一些解决问题的指示。
drools - Drools Fusion“期间”时间运算符的问题
我已经开始使用 Drools Fusion 并且在时间运算符期间遇到了奇怪的问题。出于某种原因,例如在操作员工作正常之后,我不能让它太工作。
这是我的事件的声明 - 它只包含特定类型的间隔:
这是我的规则:
当我运行它时,没有任何东西被解雇。
但是,当我在得到以下结果之后更改为:
并查看值,我清楚地看到,基于开始时间戳和持续时间,第二个事件在第一个事件内,因此应该触发持续时间。
是 Drools Fusion 中的错误还是我做错了什么?
顺便说一句 - 我在云模式下运行
drools - 事件基础 Drools 规则
我是 Drools Fusion 的新手,我无法为以下情况创建规则
- 使用(日期、错误消息等)读取服务器日志文件
- 如果找到事件类型:带有事件消息的错误:“内存错误”必须触发一些事件(截至目前SOP)
- 另一个(有)1小时它不应该触发相同事件消息和事件类型的事件(如果它在日志文件中找到)
- 1小时后如果发现相同,则必须触发事件
注意:必须使用日志文件中指定的相同日期和时间
请做同样的事情。
drools - 事件处理
我是 Drools 的新手。我正在尝试使用 Drools Fusion 编写一个简单的复杂事件处理 (CEP) 应用程序。
我的要求是
我有一个简单的事件类,如下所示:
规则文件如下:
为了测试,我将 4 个事件注入到工作内存中 - e1、e2、e3、e4 分别具有以下时间线 0m、4m、10m、12m。
Jave 类文件
我希望 e1 通过规则,因为它没有前面的事件。我也希望 e3 能够通过,因为前面的事件离我们还有 6 分钟。
但是,我得到了不同的输出:
期望输出
- 事件引起的 CRITICAL 警报:e1
- 由事件引起的 CRITICAL 警报:e3
但我越来越
- 事件引起的 CRITICAL 警报:e1
- 由事件引起的 CRITICAL 警报:e2
- 由事件引起的 CRITICAL 警报:e3
补充信息:我正在使用 STREAM 模式进行事件处理。谁能解释一下输出并告诉我哪里错了。谢谢!
drools - 是否可以访问 Drools Fusion 事件的隐式时间戳?
我正在尝试编辑现有的 Drools Fusion 规则。我们用于事件的类没有任何类型的时间戳,因此该规则依赖于 Drools 在创建事件时隐式添加的时间戳。
我想在规则的“then”块中添加一些代码,以从数据库中检索与事件发生时间相关的数据。但是,我找不到访问这些隐式时间戳的方法。
有什么办法可以做到这一点,还是我必须重新定义事件类?
drools - Drools Fusion-需要帮助
这是我在小型 POC 中用于特定功能实现的 DRL。
这是我的问题(请原谅我,如果它是由于缺乏理解引起的,因为我是融合新手)....
当我这样做时,
我期待这个输出,
但我明白了,
这是预期的行为吗?我的理解错了吗?有人能告诉我这里到底发生了什么吗?
注意:会话是为“流”模式配置的有状态会话。时钟是一个 SessionPseudoClock。