Evrete 規則引擎簡介 | baeldung
本文提供了 Evrete(一種新的開源 Java 規則引擎)的首次實踐概述。
從歷史上看,Evrete被開發為Drools 規則引擎的輕量級替代品 。它完全符合Java 規則引擎規範,並使用經典的前向鏈 RETE 演算法和一些調整和功能來處理大量資料。
它需要 Java 8 及更高版本,零依賴,無縫操作 JSON 和 XML 物件,並允許功能介面作為規則的條件和操作。
它的大部分元件都可以透過服務提供者介面進行擴充套件,這些 SPI 實現之一將帶註釋的 Java 類轉換為可執行的規則集。我們今天也將嘗試一下。
<dependency> <groupId>org.evrete</groupId> <artifactId>evrete-core</artifactId> <version>2.1.04</version> </dependency> |
要兩個規則來處理資料:
- 第一條規則清除每個客戶的總銷售額
- 第二個規則匹配發票和客戶並更新每個客戶的總數。
使用流暢的介面宣告我們的兩個規則:
KnowledgeService service = new KnowledgeService(); Knowledge knowledge = service .newKnowledge() .newRule("Clear total sales") .forEach("$c", Customer.class) .execute(ctx -> { Customer c = ctx.get("$c"); c.setTotal(0.0); }) .newRule("Compute totals") .forEach( "$c", Customer.class, "$i", Invoice.class ) .where("$i.customer == $c") .execute(ctx -> { Customer c = ctx.get("$c"); Invoice i = ctx.get("$i"); c.addToTotal(i.getAmount()); }); |
熟悉 Drools 規則引擎的人會發現我們的規則宣告在語義上等同於相同邏輯的以下DRL版本:
rule "Clear total sales" when $c: Customer then $c.setTotal(0.0); end rule "Compute totals" when $c: Customer $i: Invoice(customer == $c) then $c.addToTotal($i.getAmount()); end |
Evrete的註釋版本
<dependency> <groupId>org.evrete</groupId> <artifactId>evrete-dsl-java</artifactId> <version>2.1.04</version> </dependency> |
使用註釋建立與上面相同的規則集:
public class SalesRuleset { @Rule public void rule1(Customer $c) { $c.setTotal(0.0); } @Rule @Where("$i.customer == $c") public void rule2(Customer $c, Invoice $i) { $c.addToTotal($i.getAmount()); } } |
然後我們告訴引擎從外部位置讀取我們的規則集定義:
KnowledgeService service = new KnowledgeService(); URL rulesetUrl = new URL("ruleset.java"); // or file.toURI().toURL(), etc Knowledge knowledge = service.newKnowledge( "JAVA-SOURCE", rulesetUrl ); |
每當建立新會話時,引擎會將其與帶註釋的規則類的新例項耦合。本質上,我們可以將這些類的例項視為會話本身。
因此,如果定義了類變數,則規則方法可以訪問這些變數。
如果我們定義條件方法或將新欄位宣告為方法,這些方法也可以訪問類變數。
作為常規 Java 類,此類規則集可以擴充套件、重用和打包到庫中。
官方文件位於https://www.evrete.org/docs/。
程式碼示例和單元測試可在 GitHub 上獲得。
相關文章
- Drools規則引擎簡介
- Java中最流行的幾種業務規則引擎簡介Java
- Netflix Mantis簡介 - Baeldung
- Devs--開源規則引擎介紹dev
- RAP簡介教程&常用規則
- URule規則引擎
- 用 Java 構建簡單的規則引擎Java
- 阿里巴巴哨兵Sentinel簡介 | Baeldung阿里
- 規則引擎模式 - upperdine模式
- .NET RulesEngine(規則引擎)
- TDengine3.0 流式計算引擎語法規則介紹
- Apache Kafka資料模型概念簡介 - BaeldungApacheKafka模型
- Java各種規則引擎Java
- 架構 規則引擎 quartz架構quartz
- Java規則引擎 Easy RulesJava
- Drools 規則引擎應用
- j-easy/easy-rules: Java簡單的規則引擎Java
- 什麼是規則引擎? - martinfowler
- 規則引擎Golang指南 – Mohit KhareGolang
- 儲存引擎簡介儲存引擎
- 非同步程式設計測試Awaitlity簡介| Baeldung非同步程式設計AI
- 如何編寫一個簡單但強大的規則引擎? – maxant
- 快速整合和使用 drools 規則引擎
- 什麼是業務規則引擎?
- 全渠道營銷規則引擎案例
- iptables防火牆簡介,原理,規則編寫,常見案例防火牆
- InnoDB儲存引擎簡介儲存引擎
- Spring Boot + liteflow 規則引擎,太香了!Spring Boot
- uwegeercken/jare:Java業務規則引擎(Jare)JARJava
- 規則引擎在IoT的重要性?
- 規則引擎開發經驗分享 - reddit
- Drools 業務規則引擎的完整教程
- 如何用Go快速實現規則引擎Go
- Drools規則引擎實踐直白總結
- 關聯規則分析 Apriori 演算法 簡介與入門演算法
- Spring Cloud Alibaba系列——Sentinel降級規則簡介與實踐SpringCloud
- 在Java中用規則引擎模式替代ifelse - VitaliJava模式
- 規則引擎與ML模型的比較 - xLaszlo模型