首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

KIE Drools 6.3 實戰教程(三):有狀態會話、SOA 架構與規則引擎業務場景

     編輯:Java 綜合教學

Stateful vs Stateless KieSession 核心差異

特性StatelessKieSessionStatefulKieSession
生命週期單次 execute(facts) 即結束長期持有,需手動 dispose() 釋放
事實狀態執行間隔無狀態保留Fact 對象變更持久化於工作內存
適用場景驗證、計算、一次性決策長流程、多步交互、CEP 複雜事件處理
性能輕量,無內存持久化開銷需管理工作內存,佔用堆內存

Stateful 會話遠程調用完整代碼


String url = "https://192.168.0.101:8080/kie-drools/maven2/org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar";

KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();

UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);
urlResource.setUsername("tomcat");
urlResource.setPassword("tomcat");
urlResource.setBasicAuthentication("enabled");

InputStream is = urlResource.getInputStream();
KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));
KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());

// 關鍵:創建 Stateful 會話
KieSession kieSession = kContainer.newKieSession();

try {
    PaymentInfo payment = new PaymentInfo();
    payment.setMoneyAmount(10000);
    
    // 插入事實,觸發規則匹配
    kieSession.insert(payment);
    kieSession.fireAllRules(); // 執行所有匹配規則
    
    System.out.println("決策路徑: " + payment.getDecisionPath());
} catch (Exception e) {
    e.printStackTrace();
} finally {
    // 必須顯式釋放,否則工作內存洩漏、事實對象無法 GC
    try { kieSession.dispose(); } catch (Exception ignored) {}
}

基於 BRMS 的系統邏輯架構

BRMS系統邏輯架構

三大核心價值主張:

  1. 職責分離:IT 聚焦技術實現(平台、性能、集成),業務人員通過可視化工具編寫/維護規則(決策表、導向規則、DSL)
  2. 降低集成複雜度:規則即服務,標準化 REST/KieServer API,消除硬編碼業務邏輯散落在各微服務中
  3. 培養領域專家:開發專注基礎設施、流程引擎、數據平台;業務分析師進化為規則工程師,實現「業務自服務」

規則引擎 + BPM 典型融合場景:報銷審批流程

報銷流程決策節點

流程引擎(jBPM/Activiti/Flowable)執行至決策網關,調用 KieServer 規則服務:


// 規則文件片段
rule "報銷金額路由"
when
    $p : PaymentInfo(moneyAmount > 5000)
then
    modify($p) { setDecisionPath("GM") }; // 總經理審批
end

rule "小額報銷路由"
when
    $p : PaymentInfo(moneyAmount <= 5000)
then
    modify($p) { setDecisionPath("M") }; // 經理審批
end

BPM 根據返回的 decisionPath("M" 或 "GM")自動路由至對應人工任務節點。業務規則變更(如閾值調整為 8000)無需重新部署流程應用,仅在 Kie Workbench 熱更新規則並 Build,下一流程實例自動生效——實現「24×7 業務敏捷響應」。

SOA 服務導向架構多維度解讀

SOA架構圖

對業務/銷售人員

SOA業務視角

  • 服務即業務能力(開戶、授信、核保),可組合創新產品
  • 縮短上市週期:新產品 = 現有服務編排 + 少量新規則
  • 統一服務目錄,消除重複建設,降低運營成本

對企業級業務部門

SOA企業視角

  • 跨系統流程打通(核心系統、渠道系統、風控系統)
  • 主數據統一、業務語義統一、服務治理可視化
  • 支持多渠道接入(柜面、網銀、手機銀行、開放平台)

對 IT 開發人員

SOA技術視角

  • 契約優先:WSDL/JSON Schema 定義服務接口,代碼生成消除樣板
  • 治理體系:服務註冊發現、熔斷限流、鏈路追蹤、版本管理
  • 技術棧中立:Java/Go/Node 微服務均可註冊為 SOA 服務
  • 基礎設施即代碼:K8s + Istio 實現服務網格,遷移至雲原生

生產環境部署建議

  1. KieServer 集群模式:多節點共享資料庫(PostgreSQL/MySQL),負載均衡分發請求
  2. 規則版本管理:Maven GAV 坐標 + Git 存儲 .drl/.xls,CI/CD 流水線自動 Build/Deploy
  3. 監控指標:規則執行耗時(P99 < 50ms)、工作內存大小、命中規則數、Fact 對象生命週期
  4. 降級策略:KieServer 不可用時,本地緩存編譯後 KieContainer 兜底執行(需同步規則版本)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved