表達式計算引擎-JEP

最近調整了原先的一箇中間件的功能,把之前被產品去掉的規則表達式計算又重新添了回去.

這個中間件的基本功能是使用預定義的關鍵字和數值比對進行判斷,從大量的數據中生成告警,主要是用於服務器監控.

這裏的表達式計算僅使用了與邏輯相關的一些運算符.

原本是自己寫了一個基於stack的表達式計算,後來被產品去掉了這個功能,說是用不到這種…然而這次的需求需要進行復雜的多規則計算,因此需要在現有的基礎上重新添加回表達式計算功能.

爲以後擴展起見,原本是使用java自帶的js引擎進行計算,然而在實現了之後,自測性能時發現內存佔用率過高.

後續找了一下開源的表達式計算引擎,話說網上能找到的計算引擎介紹全部都是一樣的…後面試了幾個,最終選擇了JEP,效率和內存佔用都比較符合要求.

介紹一下簡單的使用

由於JEP在maven上有很多實現,試過了幾個後選擇了

<dependency>
    <groupId>com.singularsys</groupId>
    <artifactId>jep</artifactId>
    <version>3.5</version>
</dependency>

引擎本身支持數學運算,但我只使用了其邏輯運算的一部分

String exp = "a&&(b||c)";
Jep jep=new Jep();
jep.parse(exp);
jep.addVariable("a",true);
jep.addVariable("b",true);
jep.addVariable("c",true);
jep.evaluate();

使用方式非常簡單

  1. 構造Jep
  2. 解析表達式字符串
  3. 給表達式中的變量賦值
  4. 計算

需要注意的是給變量賦值的操作是可以重複進行的.不要重複解析表達式.

doc文檔看這裏

<http://www.singularsys.com/jep/doc/html/index.html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章