天天看點

drools規則引擎可視化_一文入門Drools規則引擎

Drools是一款基于Java的優秀的規則引擎,将複雜多變的業務規則從寫死中解放出來,以規則腳本的形式存放在檔案中,使得修改規則不需要改動代碼重新開機服務就能生效。

Drools有一定的學習成本,官方英文文檔非常詳細,但中文文檔少,本文将通過一篇文章來介紹Drools的使用和動态部署,這也是我學習過後的總結,希望對你入門Drools有幫助。

官網位址:https://www.drools.org/

github: https://github.com/kiegroup/drools

簡單使用

一個給不同商品設定不同折扣的例子

pom.xml

kmodule.xml

 檔案用于配置規則腳本,可以有多個kbase

檔案放在項目resources/

META-INF

目錄下可以自動加載

Product Bean實體

resources/rules/

Rules.drl

 規則腳本

junit Test

運作結果

解釋一下

kmodule.xml

  • 該檔案用來配置規則表,可以包含多個kbase,每個kbase都有name屬性,不能重複
  • kbase可以包含多個ksession, packages屬性是src/main/resources目錄下檔案夾的包路徑,可以定義多個包,逗号分隔,packages目錄下的所有規則檔案都會被加載,除了子目錄
  • ksession 的name不能重複,Java代碼中KieSession設定的name就是該配置的name

droolsTest

  • KieServices 該接口提供了很多方法,可以通過這些方法通路KIE關于建構和運作的相關對象,比如說可以擷取KieContainer,利用KieContainer來通路KBase和KSession等資訊;可以擷取KieRepository對象,利用KieRepository來管理KieModule等。 KieServices就是一個中心,通過它來擷取的各種對象來完成規則建構、管理和執行等操作。
  • KieContainerKieContainer可以了解為是一個KieBase的容器。
  • KieBase KieBase可以了解為是一個知識倉庫,包含了若幹的規則、流程、方法等,在Drools中主要就是規則和方法,KieBase本身并不包含運作時的資料之類的,如果需要執行規則KieBase中的規則的話,就需要根據KieBase建立KieSession。
  • KieSessionKieSession就是一個跟Drools引擎打交道的會話,其基于KieBase建立,它會包含運作時資料,包含“事實 Fact”,并對運作時資料事實進行規則運算。我們通過KieContainer建立KieSession是一種較為友善的做法,其實他本質上是從KieBase中建立出來

動态規則

實作動态規則有這幾種思路

     1. 使用Workbench,通過Web管理頁面動态生成配置規則

     2. 将規則以字元串的形式存入資料庫,需要自己開發一套規則管理系統

使用Wrokbench

1.docker部署workbench

workbench

docker run -p 8080:8080 -p 8001:8001 -d --name drools-wb jboss/drools-workbench-showcase:7.5.0.Final 

kie-server

docker run -p 8180:8180 -d --name kie-server --link drools-wb:kie_wb jboss/kie-server-showcase:7.5.0.Final

通路http://ip位址:8080/drools-wb 

預設賬号/密碼 admin/admin

drools規則引擎可視化_一文入門Drools規則引擎
2.建立項目
drools規則引擎可視化_一文入門Drools規則引擎
drools規則引擎可視化_一文入門Drools規則引擎
3.建立Object
drools規則引擎可視化_一文入門Drools規則引擎
drools規則引擎可視化_一文入門Drools規則引擎
4.建立DRL檔案
drools規則引擎可視化_一文入門Drools規則引擎
drools規則引擎可視化_一文入門Drools規則引擎
5.部署
drools規則引擎可視化_一文入門Drools規則引擎
6.使用部署的規則檔案

遠端規則Maven倉庫位址擷取

drools規則引擎可視化_一文入門Drools規則引擎
drools規則引擎可視化_一文入門Drools規則引擎

本地Maven倉庫settings.xml配置,這裡隻摘錄了需要添加的3處,需要對應去添加

建立一個标準的SpringBoot工程

Product

實體,包路徑要跟規則檔案中的一緻

DroolsController.java

PostMan通路接口

drools規則引擎可視化_一文入門Drools規則引擎

與DRL規則檔案中配置的一緻

7.動态規則

修改

ppdrl.drl

規則表,修改GOLD的打折為50%,儲存規則,将項目版本提高一個版本,并

build&deploy

項目

drools規則引擎可視化_一文入門Drools規則引擎
drools規則引擎可視化_一文入門Drools規則引擎
drools規則引擎可視化_一文入門Drools規則引擎

再次通路接口,GOLD的折扣已經變為50%

,其中沒有重新開機服務

drools規則引擎可視化_一文入門Drools規則引擎
drools規則引擎可視化_一文入門Drools規則引擎