82.8. 事件流和入口点


决策引擎可以以事件流的形式处理大量事件。在 DRL 规则声明中,流也称为 入口点。当您在 DRL 规则或 Java 应用程序中声明入口点时,决策引擎会在编译时标识并创建正确的内部结构,以仅使用该入口点中的数据来评估该规则。

从一个入口点或流开始的事实,除了决策引擎的工作内存中外,还可以从任何其他入口点加入事实。事实始终与输入决策引擎的入口点保持关联。同一类型的事实可以通过多个入口点进入决策引擎,但通过入口点 A 输入决策引擎的事实永远不会从入口点 B 匹配。

事件流具有以下特征:

  • 流中的事件根据时间戳排序。时间戳对不同的流可能具有不同的语义,但它们始终在内部排序。
  • 事件流通常具有大量事件。
  • 流中的 Atomic 事件通常不单独使用,仅适用于流。
  • 事件流可以被同发布,包含单一类型的事件,或者异构事件,并包含不同类型的事件。

82.8.1. 声明规则数据的入口点

您可以为事件声明入口点(事件流),以便决策引擎仅使用该入口点中的数据来评估规则。您可以通过在 DRL 规则中或明确在 Java 应用程序中引用入口点来隐式声明入口点。

�程

使用以下方法之一声明入口点:

  • 在 DRL 规则文件中,为插入的事实指定 entry-point "<name>"

    使用 "ATM Stream" 入口点授权撤回规则

    rule "Authorize withdrawal"
    when
      WithdrawRequest($ai : accountId, $am : amount) from entry-point "ATM Stream"
      CheckingAccount(accountId == $ai, balance > $am)
    then
      // Authorize withdrawal.
    end
    Copy to Clipboard Toggle word wrap

    使用 "Branch Stream" 入口点应用费用规则

    rule "Apply fee on withdraws on branches"
    when
      WithdrawRequest($ai : accountId, processed == true) from entry-point "Branch Stream"
      CheckingAccount(accountId == $ai)
    then
      // Apply a $2 fee on the account.
    end
    Copy to Clipboard Toggle word wrap

    法国应用程序的 DRL 规则示例都使用 fact checking Account,但从不同的入口点插入事件 WithdrawalRequest。在运行时,决策引擎仅使用 "ATM Stream" 入口点中的数据来评估 Authorize 撤回 规则,并使用仅使用 "Branch Stream" 入口点中的数据来评估 应用费用 规则。插入到 "ATM Stream" 的任何事件都不能匹配 "Apply Cost"规则的模式,插入到 " Branch Stream" 的任何事件都永不与 "Authorize withdrawal rule" 的模式匹配。

  • 在 Java 应用程序代码中,使用 getEntryPoint () 方法指定并获取 EntryPoint 对象,并相应地将事实插入到该入口点中:

    带有 EntryPoint 对象的 Java 应用程序代码并插入的事实

    import org.kie.api.runtime.KieSession;
    import org.kie.api.runtime.rule.EntryPoint;
    
    // Create your KIE base and KIE session as usual.
    KieSession session = ...
    
    // Create a reference to the entry point.
    EntryPoint atmStream = session.getEntryPoint("ATM Stream");
    
    // Start inserting your facts into the entry point.
    atmStream.insert(aWithdrawRequest);
    Copy to Clipboard Toggle word wrap

    然后,任何 从入口点"ATM Stream" 指定的 DRL 规则都会根据此入口点中的数据进行评估。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat