表达式计算引擎-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>

发布了27 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/l1161558158/article/details/102479657