- 浏览: 29572 次
- 性别:
最新评论
-
express_wind:
现在我在阿里云上有个关于QLExpress和规则引擎的专栏,欢 ...
QLExpress脚本语言技术讲解(9)-------方法绑定 -
yangbb:
使用
runner.replaceOperator()或者ru ...
QLExpress脚本语言技术讲解(8)-------逻辑的处理
文章列表
场景介绍:
写道
其实我想表达的是能不能通过“阶梯1: 交易额5000万以内取55%”这一句话,直接得到一个这样的表达式: if(p1<=50000000) return "55%";我们这边希望做到的业务场景是:具体规则通过市场人员或者财务人员通过自然语言描述(约定特定的关键字,比如"交易额","以内",“取”),如上面的“阶梯1: 交易额5000万以内取55%”程序解析这些自然语言为表达式系统每天出账单的时候拿到表达式最后再去计算对市场与财务人员他们是不会写也不会动if/else这些程序语言
解决方案:
...
hujw 的来信
您好,我在使用QLExpress的时候,发现运算结果精度不符合预期结果。期盼得到您的解答。先列下具体问题:
运行表达式:a=(b-c)/(d-c)
其中:
b=new BigDecimal("0.1694915254237288");
c=new BigDecimal("0.15384615384615385");
d=new BigDecimal("1");
(注:相关代码请参考 com.ql.util.express.test.logic.ShortCircuitLogicTest类,
QLExpress 源代码下载地址:http://code.taobao.org/p/QLExpress/src/ )
昨天收到一份厂外人士的邮件,需求如下:
天樵,您好!
网上看到你BLOG中开源出 ...
(注:相关代码请参考 com.ql.util.express.instruction.OperateDataCacheManager类,
QLExpress
源代码下载地址:http://code.taobao.org/p/QLExpress/src/ )
几乎所有的动态脚本语言在运行期都需要频繁的创建对象,并且强烈依赖语言的底层垃圾回收(java中称作GC ,可以参考这篇 《Java GC
》http://bruce-ko.iteye.com/blog/420262 )。
在多线程运行的情况下,cpu和内存的消耗很有可能被这个过程消耗殆尽 ...
(注:相关代码请参考 com.ql.util.express.test.ExpressCacheTest类,
QLExpress 源代码下载地址:http://code.taobao.org/p/QLExpress/src/ )
1、QLExpress的缓存带来的好处:
自带了一个本地缓存,用于缓存指令集,已减少编译阶段的时间消耗。
...
上一篇讲到的是对运行环境的扩展:
这一篇主要的目标是把
***************************************************
执行的脚本:orderService.orderPay(id);
***************************************************
脚本换成 更容易明白的脚本:
***************************************************
执行的脚本: 支付订单(id)
********************************* ...
类似淘宝、腾讯之类的复杂业务系统一般都采用分布式的系统集群结构,每一个独立的子系统负责一块业务,这样做主要是为了使业务更加分离,专人负责专
人的应用系统,同时降低系统的耦合性,增强系统的安全和稳定性。同时分布式的数据库和应用结构,使很多复杂的业务规则也变成了一个特定的系统调用。
比如“支付订单(12781)”,需要调用一个交易中心的支付订单API。
本章主要介绍的是如何通过扩展QlExpress的上下文,来管理和调用spring的bean。以及在出现系统故障的时候,编写批量脚本来快速的恢复子系统的间系统调用。
我们来看这个场景:
例如因为处理订单流程的平台因为网络原因 ...
由上篇得知 整个qlexpress的执行过程:
(1)单词分解
(2)单词类型分析
(3)语法分析
(4)生成运行期指令集合
(5)执行生成的指令集合。
其中前4个过程涉及语法的匹配运算等非常耗时,要做到使qlExpress的性能最大化,你可以做以下两方面的优化:
1、ExpressRunner设置成singleton(结合spring是非常容易做到的)
2、execute方法的参数设置 isCache =true(它会把 expressString 编译成一段指令,缓存在内存中,相当于缓存了(1)->(4)的过程)
我们把日志信息 ...
@org.junit.Test
public void testDemo() throws Exception{
String express = "10 * 10 + 1 + 2 * 3 + 5 * 2";
ExpressRunner runner = new ExpressRunner();
Object r = runner.execute(express,null, null, false,false);
Assert.assertTrue("表达式计算", r.toString().equalsIgnoreCase( ...
QLExpress 实现了一个功能丰富、扩展性极高的编译执行器,实现了一个完整的词法分析,语法分析,语义分析,编译指令,指令执行的过程。
在动态脚本满天飞的年代,有很多相对成熟的脚本解析工具,groovy,ruby,python... ...,淘宝开源工具 qlexpress作为一个淘宝开源的项目,也有它很多独特之处。
QLExpress 是一个开放的脚本处理工具,它开放了很多api扩展定义接口,使很多开发团队进行简单的二次开发后,就可以满足很多复杂的业务需求。
在淘宝的开源项目中,这个项目也开源了。
这个是源代码地址 :http://code.taobao.org/p/QLExpres ...