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
- 【java規則引擎】drools6.5.0版本api簡介JavaAPI
- WebSphere ILOG JRules 規則引擎執行模式簡介Web模式
- 【java規則引擎】之規則引擎解釋Java
- 【java規則引擎】簡單規則的rete網路示意圖Java
- RAP簡介教程&常用規則
- Devs--開源規則引擎介紹dev
- Netflix Mantis簡介 - Baeldung
- ZT - WebSphere ILOG JRules 規則引擎執行模式簡介(4)Web模式
- ZT - WebSphere ILOG JRules 規則引擎執行模式簡介(3)Web模式
- ZT - WebSphere ILOG JRules 規則引擎執行模式簡介(2)Web模式
- ZT - WebSphere ILOG JRules 規則引擎執行模式簡介(1)Web模式
- 用 Java 構建簡單的規則引擎Java
- 【java規則引擎】規則引擎RuleBase中利用觀察者模式Java模式
- 【java規則引擎】java規則引擎搭建開發環境Java開發環境
- 規則引擎模式 - upperdine模式
- 阿里巴巴哨兵Sentinel簡介 | Baeldung阿里
- Apache Kafka資料模型概念簡介 - BaeldungApacheKafka模型
- Java規則引擎 Easy RulesJava
- 架構 規則引擎 quartz架構quartz
- Java各種規則引擎Java
- Drools 規則引擎應用
- [Drools]JAVA規則引擎 -- DroolsJava
- TDengine3.0 流式計算引擎語法規則介紹
- JSON格式或者規則簡單介紹JSON
- j-easy/easy-rules: Java簡單的規則引擎Java
- 【java規則引擎】基本語法和相關屬性介紹Java
- 儲存引擎簡介儲存引擎
- 【java規則引擎】一個基於drools規則引擎實現的數學計算例子Java
- uwegeercken/jare:Java業務規則引擎(Jare)JARJava
- Drools 業務規則引擎的完整教程
- 規則引擎Golang指南 – Mohit KhareGolang
- java 規則引擎資料彙集Java
- 快速整合和使用 drools 規則引擎
- html5幾個簡單語法規則簡單介紹HTML
- 非同步程式設計測試Awaitlity簡介| Baeldung非同步程式設計AI
- iptables防火牆簡介,原理,規則編寫,常見案例防火牆