规则引擎-Drools

Drools规则引擎

KIE

KIE是一个分组的名字,囊括了多个工程。可以用于多个工程同一构建,部署和运用。
在这里插入图片描述

  • Drools是一个业务规则管理系统,具有前向链接和后向链接的基于推理的规则引擎,允许快速可靠地评估业务规则和复杂的事件处理。规则引擎也是创建专家系统的基本构件,在人工智能中,专家系统是模拟人类专家决策能力的计算机系统。
  • OptaPlanner是一个本地搜索和优化工具,它是从Drools Planner中剥离出来的,现在是一个拥有Drools和jBPM的顶级项目。这是Optaplanner的一种自然演化,尽管拥有强大的Drools集成,但长期以来一直独立于Drools。
  • UberFire是一个新的基础业务中心项目,从基础业务中剥离出来重新编写。UberFire提供了类似eclipse的工作台功能,其中包含面板和来自插件的页面。该项目独立于Drools和jBPM,任何人都可以将其作为构建灵活而强大的工作台(如Business Central)的基础。UberFire将用于整个JBoss的控制台和工作台开发。
  • Guvnor的重点已经缩小到封装UberFire插件集,这些插件为构建基于web的IDE提供了基础。例如用于构建和部署的Maven集成,通过收件箱管理Maven存储库和活动通知。
  • Drools和jBPM使用Uberfire作为基础构建业务中心发行版,包括一组插件,如Guvnor,以及他们自己的插件,用于决策表、引导编辑器、BPMN2设计器、人工任务等。
  • KIE-WB是一个结合了所有Guvnor、Drools和jBPM插件的超级工作台。jBPM-WB被废弃了,因为它实际上并不存在。

KIE工程概览图:
在这里插入图片描述

Drools部署架构

Drools资产执行的主要方法

执行方式 描述
KIE Server中执行 如果将Drools项目资产部署到KIE服务器,则可以使用KIE服务器REST API或Java客户机API来执行并与部署的资产进行交互。还可以使用Business Central或Business Central之外的headless Drools控制器来管理与您部署的资产关联的KIE服务器实例中的配置和KIE容器。
java应用中嵌入式方式执行 如果您在自己的Java虚拟机(JVM)环境、微服务或应用程序服务器中部署Drools项目资产,则可以使用自定义api或与核心KIE api(而不是KIE服务器api)的应用程序交互来执行嵌入式引擎中的资产。
在本地环境中执行扩展测试 作为开发周期的一部分,可以在本地执行资产,以确保在Drools中创建的资产能够正常工作。您可以在部署后使用本地执行来补充或替代执行资产。

部署架构示意图

核心概念:

  • Drools Workbench:web ui。实现认证,管理功能。
  • Drools Expert:规则引擎
  • Drools Fusion:复杂事件处理机制
  • jBPM: 工作流
  • KIE Execution Server:独立运行的执行服务器,可以通过Rest,JMS或者java接口调用,执行规则。

三种部署方式:

  • Workbench方式。Workbench管理规则库,Executor注册到Workbench,执行规则。
  • 直接调用Executor方式。用户自己构建应用网站,管理规则、Executor等信息。通过rest或jms调用Executor执行规则。
  • 嵌入式规则引擎。
    在这里插入图片描述

Drools

Drools是业务管理系统(Business Rules Management System)解决方案。提供了核心业务规则引擎,web认证和规则管理应用(Drools Workbench),在一致性级别3上对决策模型和符号(DMN)模型的完整运行时支持,以及Eclipse插件。

eclipse插件安装

插件可以帮助用户直接创建出drools工程,里面包含drools依赖以及samples。

  1. 插件下载

地址:https://www.drools.org/download/download.html
下载文件: Drools and JBPM tools
在这里插入图片描述

  1. 安装

解压下载的文件。

在eclipse的Install中,添加解压的文件路径:droolsjbpm-tools-distribution-7.32.0.Final/binaries/org.drools.updatesite/
在这里插入图片描述

点击安装,完成。

  1. 创建Drools 工程

通过new -》 other-》 drools工程,就可以创建drools工程。
其中包括了drools的依赖,以及简单的demo。

<?xml version="1.0" encoding="UTF-8"?>

  <properties>
    <runtime.version>7.0.0.Final</runtime.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.kie</groupId>
      <artifactId>kie-api</artifactId>
      <version>${runtime.version}</version>
    </dependency>

    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-core</artifactId>
      <version>${runtime.version}</version>
    </dependency>

    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-decisiontables</artifactId>
      <version>${runtime.version}</version>
    </dependency>

    <dependency>
      <groupId>org.jbpm</groupId>
      <artifactId>jbpm-test</artifactId>
      <version>${runtime.version}</version>
    </dependency>

  </dependencies>

Drools依赖jar

  • knowledge-api.jar:这提供了接口和工厂。它还有助于清楚地显示什么是用户API,什么只是引擎API。
  • knowledge-internal-api.jar:提供了内部接口和工厂。
  • drools-core.jar:这是核心Drools引擎,运行时组件。包含RETE引擎和LEAPS引擎。如果您正在预编译规则(并通过包或RuleBase对象进行部署),这是惟一的运行时依赖项。
  • drools-compiler.jar:它包含编译器/构建器组件,用于获取规则源并构建可执行的规则库。这通常是应用程序的运行时依赖项,但如果您正在预编译规则,则这个jar也是必须的。这取决于drools-core。
  • drools-jsr94.jar:这是JSR-94兼容的实现,本质上是drools编译器组件上的一个层。注意,由于JSR-94规范的性质,并不是所有的特性都可以通过这个接口轻松地公开。在某些情况下,直接访问Drools API会更容易一些,但是在某些环境中JSR-94是强制性的。
  • drools-decisiontables.jar:这是决策表“编译器”组件,它使用drools编译器组件。它同时支持excel和CSV输入格式。

Drools Engine摘要

Drools引擎的基本功能是输入数据或者fact和rule的条件相匹配,然后决定是否或者怎样来执行这些rule。
Drools 引擎包括以下几个组件:

  • Rules:用户定义的业务规则或者DMN决策。所有的决策最少包含规则触发条件以及规则的行为。
  • Facts:输入引擎的数据。
  • Production memory:Rule在引擎的存储位置。
  • Working memory:Facts在Drools引擎的存储位置。
  • Agenda:为准备执行而对激活的规则进行注册和排序(如果适用)的位置。
    在这里插入图片描述

Drools Engine API核心

  • KieServices:KieServices.Factory获得。单例,线程安全。
  • KieContainer:KieServices接口创建KieContainer。读取配置文件/META-INF/kmodule.xml
  • KieSession:KieContainer创建KieSession。
  • KieRepository:单例对象,存放kmodule.xml 中定义的KieModule。
  • KieProject: KieProject 为物理概念;通过KieProject中的KieModule文件可定义KieBase、KieSession。KieProject包含了一个kmodule.xml文件。其中定义了kmodule、kbase和ksession等属性。
发布了41 篇原创文章 · 获赞 5 · 访问量 8万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章