85.8. 事件流和入口点


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

个入口点或流中的事实(fact)也可以加入决策引擎工作内存中的任何其他入口点的事实。事实始终与输入决策引擎的入口点保持关联。同一类型的事实可以通过几个入口点输入决策引擎,但通过入口点 A 进入决策引擎的事实永远不会与入口点 B 的模式匹配。

事件源有以下特征:

  • 流中的事件按照时间戳排序。时间戳可能有不同的语义,但这些语义始终在内部排序。
  • 活动流通常具有大量事件。
  • 流中的 Atomic 事件通常不会单独使用,仅在流中集中使用。
  • 事件流可以是同构,并且包含单一类型的事件,也可以是异构类型,并且包含不同类型的事件。

85.8.1. 为规则数据声明入口点

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

流程

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

  • 在 DRL 规则文件中,为插入的事实 从入口点 "<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 规则示例插入事件 WithdrawalRequest,其事实 检查帐户,但来自不同入口点。在运行时,决策引擎仅使用 "ATM Stream" 入口点中的数据来评估 授权 撤回规则,并使用仅来自 "Branch Stream" 入口点中的数据评估 应用费用 规则。插入到 "ATM Stream" 的任何事件都无法匹配 "应用费用" 规则的模式,并且插入到 "Branch Stream" 的任何事件都无法匹配 "Authorizeraw" 的模式。

  • 在 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