概述
在本文中,我們將介紹Java中一些最受歡迎的規則引擎。
規則引擎簡介
規則引擎由推理引擎發展而來,是一種嵌入在應用程序中的組件,實現了將業務決策從應用程序代碼中分離出來,並使用預定義的語義模塊編寫業務決策。接受數據輸入,解釋業務規則,並根據業務規則做出業務決策。在Java中,大多數流行的規則引擎都實現JSR94
將規則引擎想象成一個以數據和規則作爲輸入的系統。它將這些規則應用於數據,並根據規則定義爲我們提供輸出。讓我們以一個在線購物爲例,我們希望爲客戶提供某些促銷或折扣。
- 如果購物車總額超過$ 400,可爲客戶提供20%的折扣。
- 第一次下單給10%。
上面將購物車和客戶定義爲滿足規則集中定義的條件的規則將在其中執行的數據。
規則引擎的優點
- 簡化系統架構,優化應用
- 提高系統的可維護性
- 減少編寫“硬代碼”業務規則的成本和風險
- 應付特殊狀況,即客戶一開始沒有提到要將業務邏輯考慮在內
- 過將規則引擎分開,它提供了更大的可重用性。
規則引擎場景
- 流程分支非常複雜,規則變量龐大
- 有不確定性的需求,變更頻率較高
- 需要快速做出響應和決策
- 規則變更期望脫離於開發人員,脫離coding
Java 中常用的開源規則引擎有哪些呢?
Drools
Drools是業務規則管理系統(BRMS)解決方案。它提供了核心業務規則引擎(BRE),Web UI和規則管理應用程序(Drools Workbench),對符合性級別3的決策模型和註釋(DMN)模型的完整運行時支持,以及用於核心開發的Eclipse IDE插件及Idea插件。
Drools 是一個基於Charles Forgy’s的RETE算法的,易於訪問企業策略、易於調整以及易於管理的開源業務規則引擎,符合業內標準,速度快、效率高。 業務分析師人員或審覈人員可以利用它輕鬆查看業務規則,從而檢驗是否已編碼的規則執行了所需的業務規則。
Drools是開源軟件,根據Apache Software License發佈。它用100%純Java™編寫,可以在任何JVM上運行,並且在Maven Central存儲庫中也可用。
Drools 是業務邏輯集成平臺,被分爲5個項目:
- Drools Workbench (web UI )
- Drools Expert (business rules engine)
- Drools Fusion (complex event processing features)
- jBPM (process/workflow integration for rule orchestration/flow)
- OptaPlanner (automated planning)
Drools相關概念:
事實(Fact):對象之間及對象屬性之間的關係
規則(rule):是由條件和結論構成的推理語句,一般表示爲if…Then。一個規則的if部分稱爲LHS,then部分稱爲RHS。
模式(module):就是指IF語句的條件。這裏IF條件可能是有幾個更小的條件組成的大條件。模式就是指的不能在繼續分割下去的最小的原子條件。
EasyRule
EasyRule是輕量級的規則引擎API。它提供Rule抽象來創建帶有條件和動作的規則,以及RulesEngine通過一組規則運行以測試條件和執行動作的API。
以下是EasyRule的一些核心特點:
- 輕量級規則引擎API。
- 基於註釋和POJO。
- 支持複合規則構造。
- 支持表達語言(如MVEL和SpEL)來定義規則。
簡單瞭解下easyRule
核心概念
Rule : 包含規則執行的條件與動作,描述,優先級別。屬於最基本配置。
Facts:輸入對象。
RulesEngine:規則引擎執行核心。
簡單瞭解下使用例子
添加Maven 依賴
簡易規則提供以下創建規則的選項
- 以聲明方式使用註釋。
- 務實地使用流利的API。
- 使用表達語言
- 使用規則描述符。
讓我們看幾個例子:
聲明式註解
或者使用函數方式
表達式方式
文件描述
執行規則
RuleBook
RuleBook提供了靈活的簡單直觀的DSL。如果您有更多規則集,我們可以將其構建爲帶註釋的POJO,並且RuleBook可以將整個包立即轉換爲RuleBook。它提供了一個易於使用的啓用Lambda的領域特定語言或使用POJO,讓我們使用RuleBook來查看一個簡單的規則定義:
Maven依賴
要將RuleBook添加到項目中,請在pom.xml文件中添加以下依賴項:
讓我們看一個例子:
Hello World
使用Facts
執行規則
OpenL Tablets
OpenL Tablets業務規則引擎(BRE)和業務規則管理系統(BRMS)。它包含以下主要組件:
- Business Rules Engines(業務規則引擎)
- WebStudio
- Web services(web服務)
- Rule repository(基於JCR的實現的規則庫)
核心概念
Rules:規則是由條件,操作和返回值組成的邏輯語句
Tables: 列出了OpenL Tablets處理的基本信息,例如規則和數據
Projects: 是處理規則相關信息所需的所有資源的容器。通常,一個簡單的項目僅包含帶有規則的Excel文件。
maven依賴
使用
總結
在本文中,我們討論了Java中流行的規則引擎。這些規則引擎爲業務邏輯抽象提供了靈活性。在所有這些規則引擎中,Drools是最先進,最活躍的規則引擎,也正因如此,環境也是相對複雜。
EasyRule更加簡潔,我們現在就是使用的這個解決方案。
根據自身的業務需要,選擇更加符合的業務引擎方案。