初識規則引擎

一、什麼是規則引擎

規則引擎是一種嵌入應用中的組件,通過將業務流程與業務規則分離開來實現商業靈活性,也就是降低了各個模塊的耦合度,這樣無需太多的複雜性就能處理業務邏輯的調整和更改。(說簡單點就是if-then語句)

二、什麼情況下需要規則引擎

a.業務邏輯代碼中包含了很多if-else語句
b.代碼變化會導致大量財政損失

三、規則引擎的結構

  • 規則引擎是用於外部程序來調用規則包的一批Java類庫,將規則引擎嵌入到應用程序中就和添加Java類一樣。通過RuleEngine類調用規則包來傳遞需要處理的業務數據。規則包配置完成後會生成一個集成Rulecontext的類,並且將這個類自動編譯發佈到java的class path中。外部程序通過RuleEngine接口,根據需要調用規則包,加載對應的RuleContext類。
  • Web方式調用規則包原理:在規則配置器中添加一個web方式調用規則包的測試頁面,這個頁面採用jsp程序,根據規則包的接口數據結構自動生成文本輸入框。同時根據數據結構的類型自動生成解析request中提交的數據,並且傳遞到規則引擎中,並且執行對應的規則包,最後取出返回結果顯示在頁面當中。
    這裏寫圖片描述

四、規則引擎的工作流程

1.將事件加入到工作內存中
2.將工作內存中的時間和規則庫中的規則進行匹配
3.將發生衝突的規則放入衝突集合中
4.按照衝突消解策略,把需要執行的規則按照順序放入議程
5.執行規則設定的動作
6.重複第2到第5步,直到所有規則都被匹配執行

五、開源drools

1.什麼是drools

Drools是一個開源的基於java的規則引擎, 也叫JBoss Rules

2.drools組成模塊

Drools Guvnor 基於網頁的規則管理系統
Drools Expert 規則引擎
JBPM 流程引擎
Drools Fusion 複雜事件處理

3.Drools屬性

Salience:指定規則執行的優先級,數字越大,優先級越高。
Dialect:指定使用語言,java或者mvel(mvel是基於就java的表達式語言,支持屬性和方法直接訪問),默認爲java。
Activation-group:將規則進行分組,同組中只要有一個規則執行了,其他規則都不再執行。
Agenda-group:設置了該屬性後,只有手動激活才能執行該規則,按照優先級執行。
Lock-on-active:只能與-group一起使用,可以避免執行過的規則再次被執行。
Auto-focus:設置爲true時可以自動獲取焦點,默認值爲false。
Date-effective:當系統時間大於等於date-effective設置的時間時規則纔會觸發執行。

4.drools7 API

(Drools7和Drools5使用的是兩套完全不同的API)
- Kieservices:Kieservices就是一箇中心,通過它來獲取各種對象來完成規則構建、管理、執行等操作。
- Kiecontainer:Kiecontainer是一個KieBase的容器,提供了獲取KieBase的方法和創建KieSession的方法。(獲取KieSession的方法通過KieBase來創建KieSession)
- KieBase:KieBase是一個知識倉庫,包含了很多規則、流程、方法等。如果需要執行規則KieBase中的規則,就需要根據KieBase創建KieSession。
- KieSession:KieSession是應用程序和規則引擎進行交互的會話通道,不會建立緩存。
- KieRepository:用於存放KieModule倉庫。
- KieProject:初始化KieContainer,構造KieModule並將其存放在KieRepository中,KieContainer可以通過KieProject來查找KieModule定義的信息來構造KieBase和KieSession。
- ClasspathKieproject:實現KieProject接口。

六、規則文件的結構

rule “name”
atrributes
when
LHS
then
RHS
end

七、Rete算法

保存以往匹配過程中產生的所有信息,只將新增加的事實與規則進行匹配,犧牲存儲空間來換取時間效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章