Drools - 规则编写



如果您查看 HelloWorld 项目 (Sample.drl) 中编写的默认规则,会发现使用了许多关键字,我们现在将对其进行解释。

Default Rule

Sample.drl

  • 包 (Package) − 每条规则都以包名开头。包充当规则的命名空间。同一个包内的规则名称必须唯一。规则中的包类似于 Java 中的包。

  • 导入语句 (Import statement) − 您想要应用规则的任何事实都需要导入。例如,以上示例中的 com.sample.DroolsTest.Message。

  • 规则定义 (Rule Definition) − 它由规则名称、条件和结论组成。Drools 关键字为 rule、when、thenend。在上面的示例中,规则名称为“Hello World”和“GoodBye”。when 部分是两条规则中的条件,then 部分是结论。在规则术语中,when 部分也称为 LHS(左侧), then 部分也称为 RHS(右侧)。

现在让我们来看一下用于加载 Drools 并执行规则的 Java 文件中使用的术语。

知识库 (Knowledge Base)

知识库是一个接口,用于管理规则、流程和内部类型的集合。它包含在包org.drools.KnowledgeBase中。在 Drools 中,这些通常被称为知识定义知识。知识定义分组到知识包中。可以添加或删除知识定义。知识库的主要目的是存储和重用它们,因为它们的创建成本很高。知识库提供创建知识会话的方法。

知识会话 (Knowledge Session)

知识会话是从知识库中检索的。它是与 Drools 引擎交互的主要接口。知识会话可以分为两种类型:

  • 无状态知识会话 (Stateless Knowledge Session)

  • 有状态知识会话 (Stateful Knowledge Session)

无状态知识会话 (Stateless Knowledge Session)

无状态知识会话是一个无状态会话,构成了最简单的用例,不使用推理。无状态会话可以像函数一样调用,传递一些数据,然后接收一些结果。无状态会话的常见示例包括:

  • 验证

    • 这个人是否有资格获得抵押贷款?

  • 计算

    • 计算抵押贷款保险费。

  • 路由和过滤

    • 将传入的消息(例如电子邮件)过滤到文件夹中。

    • 将传入的消息发送到目标。

有状态知识会话 (Stateful Knowledge Session)

有状态会话生命周期更长,并允许随着时间的推移进行迭代更改。有状态会话的一些常见用例包括:

  • 监控

    • 股票市场监控和分析,用于半自动购买。

  • 诊断

    • 故障查找,医学诊断

  • 物流

    • 包裹跟踪和交付配置

知识构建器 (Knowledge Builder)

KnowledgeBuilder 接口负责从知识定义(规则、流程、类型)构建 KnowledgePackage。它包含在包org.drools.builder.KnowledgeBuilder中。知识定义可以采用多种格式。如果构建过程中有任何问题,KnowledgeBuilder 将通过这两种方法报告错误:hasErrorsgetError

下图解释了这个过程

KnoledgeBuilder

在上面的示例中,由于我们采用的是无状态知识会话的简单示例,因此我们将事实插入会话中,然后调用 fireAllRules() 方法,您将看到输出。

对于有状态知识会话,一旦规则被触发,有状态知识会话对象必须调用dispose()方法来释放会话并避免内存泄漏。

广告
© . All rights reserved.