成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Drools規則引擎實戰

移動開發 開發
在機頂盒軟探針項目中,項目需要針對地域維度對機頂盒指標:播放成功率、收視用戶數、EPG請求成功率,實現準實時的告警判定。針對告警規則的多變性,我們引入了規則引擎作為告警規則的實現方式。

Part 1 規則引擎

規則引擎:全稱為業務規則管理系統,英文名為BRMS。規則引擎的主要思想是將應用程序中的業務決策部分分離出來,并使用預定義的語義模塊編寫業務決策(業務規則),由用戶或 開發者在需要時進行配置、管理。需要注意的是規則引擎并不是一個具體的技術框架,而是指的一類系統,即業務規則管理系統。

java開源的規則引擎有:Drools、Easy Rules、Mandarax、IBM ILOG。使用最為廣泛并且開源的是Drools

主要應用場景:對于一些存在比較復雜的業務規則并且業務規則會頻繁變換的系統比較適合使用規則引擎,如下:

風控決策系統-------風險貸款、風險評估

反欺詐項目-----銀行貸款、征信驗證、反洗錢

實時反欺詐平臺-----手機支付、信用卡消費

Drools規則引擎構成

drools規則引擎由以下幾部分構成:

  • Working Memory(工作內存)
  • Rules(規則庫)
  • Inference Engine(推理引擎)

◆Pattern Match(匹配器)具體匹配那一個規則,由它來完成

◆Agenda(議程)

◆Execution Engine(執行引擎)

Drools規則引擎概念

Working Memory:工作內存,drools規則引擎會從Working Memory中獲取數據并和規則文件中定義的規則進行模式匹配,所以我們開發的應用程序只需要將我們的數據插入到Working Memory中即可,例如本案例中我們調用kieSession.insert(order)就是將order對象插入到了工作內存中。

Fact:事實,是指在drools 規則應用當中,將一個普通的JavaBean插入到Working Memory后的對象就是Fact對象,例如本案例中的Order對象就屬于Fact對象。Fact對象是我們的應用和規則引擎進行數據交互的橋梁或通道。

Rules:規則庫,我們在規則文件中定義的規則都會被加載到規則庫中。

Pattern Matcher:匹配器,將Rule Base中的所有規則與Working Memory中的Fact對象進行模式匹配,匹配成功的規則將被激活并放入Agenda中。

Agenda:議程,用于存放通過匹配器進行模式匹配后被激活的規則。

Drools 基礎語法

規則文件構成

關鍵字

描述

package 包名

只限于邏輯上的管理,同一個包名下的查詢或者函數可以直接調用

import

用于導入類或者靜態方法

global

全局變量

function

自定義函數

query

查詢

rule end

規則體

一個規則通常包含三個部分:屬性部分(attribute)、條件部分(LHS)和結果部分(RHS)

語法結構體:

rule "ruleName"
    attributes
    when
        LHS
    then
        RHS
end

rule:關鍵字,表示規則開始,參數為規則的唯一名稱。

attributes:規則屬性,是rule與when之間的參數,為可選項。

when:關鍵字,后面跟規則的條件部分。

LHS(Left Hand Side):是規則的條件部分的通用名稱。它由零個或多個條件元素組成。如果LHS為空,則它將被視為始終為true的條件元素。

then:關鍵字,后面跟規則的結果部分。

RHS(Right Hand Side):是規則的后果或行動部分的通用名稱。

end:關鍵字,表示一個規則結束。

Part 2 規則比較操作符

符號

說明

>

大于

<

小于

>=

大于等于

<=

小于等于

==

等于

!=

不等于

contains

檢查一個Fact對象的某個屬性值是否包含一個指定的對象值

not contains

檢查一個Fact對象的某個屬性值是否不包含一個指定的對象值

memberOf

判斷一個Fact對象的某個屬性是否在一個或多個集合中

not memberOf

判斷一個Fact對象的某個屬性是否不在一個或多個集合中

matches

判斷一個Fact對象的屬性是否與提供的標準的Java正則表達式進行匹配

not matches

判斷一個Fact對象的屬性是否不與提供的標準的Java正則表達式進行匹配

Part 3 Drools 規則屬性 attributes

Drools中提供的屬性如下表(部分屬性)

屬性名

說明

salience

指定規則執行優先級

dialect

指定規則使用的語言類型,取值為java和mvel

enabled

指定規則是否啟用

date-effective

指定規則生效時間

date-expires

指定規則失效時間

activation-group

激活分組,具有相同分組名稱的規則只能有一個規則觸發

agenda-group

議程分組,只有獲取焦點的組中的規則才有可能觸發

timer

定時器,指定規則觸發的時間

auto-focus

自動獲取焦點,一般結合agenda-group一起使用

no-loop

防止死循環,防止自己更新規則再次觸發

lock-on-active

no-loop增強版本。可防止別人更新規則再次出發

Part 4 項目應用

省機頂盒軟探針平臺為實現機頂盒用戶視頻使用質量的實時監控,采用實時大數據進行準實時的指標統計,指標結果推送kafka,由平臺新增的告警引擎實時消費kafka數據并通過預定制的專家規則實現實時的告警判定,最終告警結果實時通知反饋到告警平臺,實現告警到告警恢復的生命周期。

圖片

Part 5 規則示例

rule "播放成功率告警"
no-loop true
when
    $fact:Fact()
    eval($fact.getPlay() > 0.0)
    eval($fact.getPlay() < MapUtils.getDoubleValue($fact, "playThreshold", 0.96))
then
    RuleResult fr = new RuleResult("播放成功率告警");
    fr.setRuleCode(900001);
    fr.setActualTime(MapUtils.getString($fact, "actualTime"));
    fr.setAlarmTime(RuleUtil.getAlarmTime(MapUtils.getString($fact, "actualTime"), MapUtils.getString($fact, "900001")));
    //說明當前是要告警的
    fr.setAlarmStatus("1");
    fr.setAlarmTitle("指標播放成功率異常");
    fr.setLocateInfo("指標播放成功率異常");
    fr.setAlarmText(RuleUtil.playAlarmText($fact, MapUtils.getDoubleValue($fact, "playThreshold", 0.96)));
    insert(fr);
end




rule "播放成功率告警結束"
no-loop true
when
    $fact:Fact()
    eval($fact.getPlay() >= MapUtils.getDoubleValue($fact, "playThreshold", 0.96))
    eval(MapUtils.getLongValue($fact, "900001") > 0)
    eval(RuleUtil.checkAlarmTime($fact.getActualTime(), MapUtils.getLongValue($fact, "900001_time"), MapUtils.getLongValue($fact, "reThreshold", 900000)))
then
    RuleResult fr = new RuleResult("播放成功率告警恢復");
    fr.setRuleCode(900001);
    fr.setActualTime(MapUtils.getString($fact, "actualTime"));
    fr.setAlarmTime(MapUtils.getString($fact, "900001"));
    fr.setAlarmStatus("0");
    fr.setMsg("告警恢復");
    fr.setAlarmTitle("指標播放成功率異常");
    fr.setLocateInfo("指標播放成功率異常");
logger.info("播放告警恢復了{}", $fact);
insert(fr);


責任編輯:龐桂玉 來源: 移動Labs
相關推薦

2022-11-23 22:09:10

Drools規則引擎

2022-11-02 09:02:08

Drools引擎DMN

2025-06-23 00:00:05

2023-08-09 08:01:38

場景Redis接口

2025-04-03 00:00:03

2025-05-13 04:15:00

2025-01-13 13:47:13

2023-08-29 09:15:48

2024-08-02 08:43:44

2020-12-11 12:56:40

物聯網云平臺引擎

2024-05-27 00:00:02

govaluateGo語言

2023-06-07 08:32:32

引擎技術while

2011-02-25 10:06:39

ibmdwWebSphere

2012-01-05 10:26:26

JavaApache

2024-02-27 08:25:52

LiteFlow代碼語法

2012-03-06 10:56:32

HTML 5

2012-03-09 09:47:51

Apache CameJava

2023-01-05 09:33:38

低代碼高性能引擎

2017-08-10 09:11:38

規則引擎構建

2009-06-17 10:51:58

WF4.0規則引擎
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩视频一区二区三区 | 国产一区久久精品 | 伊人无码高清 | 日一区二区 | 欧美精品福利视频 | 一级片在线视频 | 精品国产免费一区二区三区五区 | 九九爱这里只有精品 | 成人av网站在线观看 | 国产不卡视频 | 国产亚洲精品精品国产亚洲综合 | 四虎影院在线播放 | 成人超碰 | 秋霞在线一区 | 日韩欧美一区二区在线播放 | 国产91亚洲精品一区二区三区 | 精品国产区 | 99精品视频在线 | 久久久在线视频 | 精品久久香蕉国产线看观看亚洲 | 一级片av | 水蜜桃久久夜色精品一区 | 99精品视频在线 | 人人澡人人射 | 91精品国产欧美一区二区 | 天天干人人 | 夜夜摸天天操 | 久久国产精品久久 | 天堂在线中文字幕 | 久热9| 亚洲精品一区二区三区中文字幕 | 黄色毛片免费视频 | 91麻豆精品国产91久久久更新资源速度超快 | 久久精品一区二区 | 美国一级片在线观看 | 久草视频网站 | 黄色大片免费网站 | 亚洲一区二区av | 国产精品久久久久久久久大全 | 午夜激情在线 | 日韩欧美在线观看 |