規(guī)則引擎是從推理引擎演變而來的一種應用程序組件,它能夠?qū)碗s的業(yè)務決策從應用程序代碼中分離出來,并使用預定義的語義模塊來編寫業(yè)務決策。規(guī)則引擎接收數(shù)據(jù)輸入,解釋并執(zhí)行業(yè)務規(guī)則,從而作出相應的業(yè)務決策。
應用背景
企業(yè)在開發(fā)IT系統(tǒng)時面臨以下挑戰(zhàn):
1. 需要自動化的管理流程以提高效率,盡管現(xiàn)代商業(yè)規(guī)則可能極為復雜。
2. 市場需求使得業(yè)務規(guī)則經(jīng)常發(fā)生變化,因此IT系統(tǒng)必須能夠快速、低成本地適應這些變化。
3. 為了快速、低成本地更新,業(yè)務人員應該能夠直接管理和修改IT系統(tǒng)中的規(guī)則,而無需依賴于程序開發(fā)人員。
產(chǎn)品優(yōu)點
規(guī)則引擎的優(yōu)點在于它可以降低實現(xiàn)復雜業(yè)務邏輯的組件的復雜性,從而降低應用程序的維護和可擴展性成本。具體來說,規(guī)則引擎能夠:
- 將商業(yè)決策者制定的商業(yè)決策邏輯與應用程序開發(fā)人員的技術決策相分離。
- 提高實現(xiàn)復雜邏輯的代碼的可維護性。
- 允許在開發(fā)期間或部署后修復代碼缺陷。
- 處理未預料的情況,即客戶最初未能明確提出的業(yè)務邏輯。
- 支持組織對敏捷或迭代開發(fā)過程的需求。
代表企業(yè)
市場上有許多規(guī)則引擎可供選擇,包括商業(yè)和開源版本。其中,Drools是開源規(guī)則引擎的一個例子,而VisualRules和iLog則是商業(yè)規(guī)則引擎的代表。
結(jié)合BPEL
隨著越來越多的企業(yè)轉(zhuǎn)向面向服務的方法,業(yè)務流程執(zhí)行語言(BPEL)已成為協(xié)調(diào)服務和確保業(yè)務流程無縫執(zhí)行的標準。這種趨勢為企業(yè)提供了更加靈活和經(jīng)濟高效的業(yè)務流程管理機會。然而,在傳統(tǒng)的業(yè)務流程中,決策點上的業(yè)務規(guī)則往往被嵌入到業(yè)務流程或自定義Java代碼中,這可能導致未來的問題。為了避免這些問題,最佳實踐是使用規(guī)則引擎將業(yè)務流程與業(yè)務規(guī)則分離,使業(yè)務用戶能夠獨立地創(chuàng)建和修改規(guī)則,從而顯著降低維護成本。
產(chǎn)品說明
規(guī)則引擎負責解析、調(diào)用和執(zhí)行規(guī)則包。VisualRules規(guī)則引擎使用Java語言實現(xiàn),并提供了多種外部調(diào)用接口,包括Java類接口、Socket、Servlet和SOAP等。Java類接口是核心接口,其他接口也通過此接口調(diào)用。為了簡化規(guī)則引擎,規(guī)則包的解析已在規(guī)則編輯時完成,規(guī)則引擎僅處理規(guī)則包的調(diào)用和執(zhí)行,并為其使用的數(shù)據(jù)庫接口、Excel接口、內(nèi)存表接口和XML接口提供默認實現(xiàn)。
執(zhí)行原理
VisualRules規(guī)則引擎根據(jù)規(guī)則包名稱獲取對應的rsc文件,并將其加載到內(nèi)存中,生成規(guī)則包執(zhí)行上下文。隨后,規(guī)則引擎將傳遞的參數(shù)傳遞到規(guī)則包執(zhí)行上下文中,并開始執(zhí)行規(guī)則包。執(zhí)行完成后,規(guī)則引擎將規(guī)則包執(zhí)行上下文中的數(shù)據(jù)返回給調(diào)用規(guī)則包的應用程序。這種簡單的執(zhí)行原理有助于保持規(guī)則引擎的穩(wěn)定性和高性能。
接口信息
數(shù)據(jù)庫接口
規(guī)則包的對象庫中定義了數(shù)據(jù)庫對象接口,如Database、Table、Select、View和Procedure。VisualRules規(guī)則引擎使用Java數(shù)據(jù)庫連接實現(xiàn)這些接口,以確保良好的性能。用戶也可以根據(jù)需要重新實現(xiàn)這些接口。
Excel接口
規(guī)則包需要調(diào)用的Excel接口主要包括IExcelBook、IExcelSheet、IExcelTableSheet和IExcelXYSheet。VisualRules規(guī)則引擎使用Apache POI實現(xiàn)Excel接口。
內(nèi)存表格接口
規(guī)則包需要調(diào)用的內(nèi)存表格接口為Sheet,VisualRules使用Object[][]實現(xiàn)內(nèi)存表格接口。
Xml接口
規(guī)則包需要調(diào)用的XML接口為Node,VisualRules使用Jdom實現(xiàn)。
如何調(diào)用
規(guī)則引擎是一組Java類,供外部Java程序調(diào)用規(guī)則包。這些類包含在engine.jar中。外部Java程序調(diào)用規(guī)則包時,主要使用com.flagleader.engine.RuleEngine和com.flagleader.engine.RuleEngineFactory這兩個類。RuleEngineFactory是獲得規(guī)則引擎實例的工廠類,一般代碼為RuleEngine ruleEngine = RuleEngineFactory.newInstance().getRuleEngine();之后,可以調(diào)用規(guī)則引擎中的put、execute和get方法。put方法用于傳遞輸入值,execute方法用于運行指定的規(guī)則包,get方法用于獲取輸出值。典型的調(diào)用代碼為:ruleEngine.put(傳入對象);ruleEngine.execute("規(guī)則包調(diào)用名");傳出對象 = ruleEngine.get("傳出對象名");因此,外部程序調(diào)用規(guī)則包非常簡單,只需幾行代碼即可完成。
參考資料 >
規(guī)則引擎介紹與使用:Drools、Aviator、QLExpress、EasyRules、URule.blog.2024-10-25
巨詳細的規(guī)則引擎 Drools——小白也可食用.blog.2024-10-25
規(guī)則引擎框架LiteFlow.簡書.2024-10-25