规则引擎深度对比,LiteFlow vs Drools!( 四 )


LiteFlow并没有界面形态 。目前只能通过第三方的Nacos , Etcd提供的界面来辅助完成界面的规则修改 。
结论
Drools在UI形态生态上领先LiteFlow一截 。
框架的性能表现这里用Drools和LiteFlow实现了同样的一段逻辑Demo 。
根据订单金额来加积分的Demo案例 。
案例逻辑很简单 , 根据订单的金额来动态判断该加多少积分:
小于100元 , 不加积分 。
100到500元 , 加100积分 。
500到1000元 , 加500积分 。
1000元以上 , 加1000积分 。
其中Drools的规则如下:
package rules;import com.example.droolsdemo.entity.Order;rule "score_1"when    $order:Order(amount<100)then    $order.setScore(0);    System.out.println("触发了规则1");endrule "score_2"when    $order:Order(amount>=100 && amount < 500)then    $order.setScore(100);    System.out.println("触发了规则2");endrule "score_3"when    $order:Order(amount>=500 && amount < 1000)then    $order.setScore(500);    System.out.println("触发了规则3");endrule "score_4"when    $order:Order(amount>=1000)then    $order.setScore(1000);    System.out.println("触发了规则4");end其中等价的LiteFlow规则如下:
<?xml version="1.0" encoding="UTF-8"?><flow>    <nodes>        <node id="w" type="switch_script">            <![CDATA[                def amount = defaultContext.getData("order").getAmount();                if (amount < 100){                    return "a";                }else if(amount >= 100 && amount < 500){                    return "b";                }else if(amount >= 500 && amount < 1000){                    return "c";                }else{                    return "d";                }            ]]>        </node>        <node id="a" type="script">            <![CDATA[                def order = defaultContext.getData("order");                order.setScore(0);                println("执行规则a");            ]]>        </node>        <node id="b" type="script">            <![CDATA[                def order = defaultContext.getData("order");                order.setScore(100);                println("执行规则b");            ]]>        </node>        <node id="c" type="script">            <![CDATA[                def order = defaultContext.getData("order");                order.setScore(500);                println("执行规则c");            ]]>        </node>        <node id="d" type="script">            <![CDATA[                def order = defaultContext.getData("order");                order.setScore(1000);                println("执行规则d");            ]]>        </node>    </nodes>    <chain name="chain1">        SWITCH(w).TO(a, b, c, d);    </chain></flow>

经验总结扩展阅读