我構建了一個規則引擎,它在匹配第一條規則後退出。規則的排序使用Salience,鎖定活動(以防止重新匹配)和激活組一旦輸入與第一條規則匹配就立即退出。Drools 7.2:構建規則引擎(監視模式和高性能)
業務現在對監視器模式有新的要求,其中引擎必須繼續將輸入與未處於監視模式的規則相匹配。
例如:
Object(attr1 = 1, attr2 = 2)
monitor Rule 1: if (attr1 = 1)
non-monitor Rule 2: if(attr = 1 and attr2= 2)
non-monitor Rule 3: ..
在這裏,應當同時匹配規則1和規則2,但必須儘快規則2匹配,因爲它是在非監視模式(對於更高性能的)出口。監控模式規則僅用於查看它們是否得到評估,並且爲了我們的業務目的而在後端觸發事件。
我目前使用PackageDescBuilder,RuleDescrBuilder等從數據庫動態加載我們的規則。一個簡單的StatelessKieSession用於評估和存儲謂詞中的結果,作爲RHS的一部分。
KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId());
StatelessKieSession kieSession = kContainer.newStatelessKieSession();
kieSession.execute(predicate);
問:新規則如何構建?我應該爲此探索哪些概念?
我指的是在這份文檔: https://docs.jboss.org/drools/release/7.2.0.Final/drools-docs/html_single/#_rule_attributes
謝謝!
它是更直接調用'fireAllRules(1)'停止已經打響了第一條規則之後。 – laune