-
规则引擎-00-入门
规则引擎
规则引擎起源于基于规则的专家系统,而基于规则的专家系统又是专家系统的其中一个分支。
专家系统属于人工智能的范畴,它模仿人类的推理方式,使用试探性的方法进行推理,并使用人类能理解的术语解释和证明它的推理结论。
利用它就可以在应用系统中分离商业决策者的商业决策逻辑和应用开发者的技术决策,并把这些商业决策放在中心数据库或其他统一的地方,让它们能在运行时可以动态地管理和修改,从而为企...
2020-05-26 08:05:35 |
Engine
-
规则引擎-00-入门 聊一聊
chat
Q: 详细介绍一下 java 规则引擎
Java规则引擎是一种软件设计模式,它允许开发者将业务决策从应用程序代码中分离出来,并通过一组可配置的规则来实现业务逻辑。
这样做的好处是提高了业务逻辑的可维护性和可扩展性,因为规则可以不修改代码的情况下动态地更改。
下面将详细介绍Java规则引擎的概念、特点、使用场景以及一个流行的Java规则引擎库——Easy Rules。
概念...
2020-05-26 08:05:35 |
Engine
-
配置增量加载设计方案
背景
我们经常需要去实现各种配置的加载,有时候需要处理一些变化。
最简单的策略就是定期全量加载,不过如果配置较多,可能会产生 GC,对实时链路影响较大。
trade-off
配置的定期加载是【频率】与【耗时】之间的一个权衡。
实际业务中,我们都希望配置变更,立刻生效。但是实现上有些困难。
可行的方案主要有:
(1)mq 通知,内存同步更新
(2)存储到 redis 等共享的三...
2020-05-26 08:05:35 |
Design
-
java 表达式引擎概览-07-google aviator regex 正则表达式提取
目标
google aviator regex 正则表达式提取
官方文档
AviatorScript 中正则表达式也是一等公民,作为基本类型来支持, / 括起来的正则表达式就是一个 java.util.Pattern 实例,例如 /\d+/ 表示 1 个或者多个数字,正则表达式语法和 java 完全相同,但是对于需要转义的字符不需要连续的反斜杠 \\ ,只要一个 \ 即可,比如我...
2020-05-26 07:11:16 |
Engine
-
java 表达式引擎概览-06表达式引擎引擎页面样式优化
目标
让页面样式更加现代化。
STEP7: 样式调整
需求
下面的页面样式比较原始,帮我的 css 样式进行调整美化,让其看起来更加现代化+扁平化。
要求按钮尽量加上 icon,使用 emoji 也行,表达对应的含义。比如新增/删除/重置
按钮的颜色,新增类型用绿色系,删除用红色系,重置警告橙色系等等。
原始的页面代码:
<!D...
2020-05-26 07:11:16 |
Engine
-
java 表达式引擎概览-05-google Aviator 表达式引擎布尔条件验证与规则引擎
最佳实践
https://www.yuque.com/boyan-avfmj/aviatorscript/ou23gy
STEP1: Aviator 执行表达式引擎==》规则引擎
最简单的例子
因为布尔值只是对应的 boolean,每一个对应一个条件。
所以最后的结果只是一个类似于 (c1 && c2) || (c3 || c4) 的表达式。
public sta...
2020-05-26 07:11:16 |
Engine
-
java 表达式引擎概览-04-google 表达式引擎最佳实践
最佳实践
https://www.yuque.com/boyan-avfmj/aviatorscript/ou23gy
建议最少加上这2个
static {
// 默认方法执行 60S?
AviatorEvaluator.getInstance().useLRUExpressionCache(20000);
AviatorEvaluator.setOption(...
2020-05-26 07:11:16 |
Engine
-
java 表达式引擎概览-03-google 表达式引擎 Aviator 5.x 文档
起源
Aviator 起源于 2010 年左右,当时我还在淘宝中间件,读了龙书,了解了 ASM ,开始读 clojure 编译器的源码。
刚好同时在做 Notify 这个内部消息中间件的一个重要版本实现,其中有一个需求是实现 AMQP 规范里的 header 订阅,允许用户指定一个布尔表达式来决定是否订阅某种类型的消息,需要对布尔表达式字符串进行求值。
当时正处于造轮子的兴奋期,因此就...
2020-05-26 07:11:16 |
Engine