天天看點

規則引擎-DroolsDrools規則引擎

Drools規則引擎

KIE

KIE是一個分組的名字,囊括了多個工程。可以用于多個工程同一建構,部署和運用。

規則引擎-DroolsDrools規則引擎
  • 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工程概覽圖:

規則引擎-DroolsDrools規則引擎

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執行規則。
  • 嵌入式規則引擎。
    規則引擎-DroolsDrools規則引擎

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

規則引擎-DroolsDrools規則引擎
  1. 安裝

解壓下載下傳的檔案。

在eclipse的Install中,添加解壓的檔案路徑:droolsjbpm-tools-distribution-7.32.0.Final/binaries/org.drools.updatesite/

規則引擎-DroolsDrools規則引擎

點選安裝,完成。

  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:為準備執行而對激活的規則進行注冊和排序(如果适用)的位置。
    規則引擎-DroolsDrools規則引擎

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等屬性。

繼續閱讀