java规则引擎一:Drools

Drools是一个基于java的开源规则引擎, 规则引擎基本都只有一个逻辑就可以解释清楚: when…then… 当达到什么条件的时候,触发某一个动作。 Drools是java项目中常用的规则引擎之一。

规则引擎的应用场景单一,但是用处很大。 例如在某个场景下 有100个方法都要修改数据库的某一张表数据,且修改后都要有一个动作,就是想某一个系统发送一条消息。 传统的解决方案中,需要100个方法中都调用一个发送方法, 假如100个方法分散在10个系统中, 就至少要修改十次。 如果使用规则引擎+canal的组合就可以轻松解决这个问题。 当数据库表的数据发生insert update的时候,发送MQ到规则引擎系统, 规则引擎系统根据规则发送MQ到其他系统即可。 即使以后系统中加入了别的insert也不用再重复的写send方法了。

Drools的基本使用:

  • 代码工程结构
    java规则引擎一:Drools_第1张图片
  • maven引入包
    
        
            org.kie
            kie-api
            6.5.0.Final
        
        
            org.drools
            drools-compiler
            6.5.0.Final
            runtime
        
        
            junit
            junit
            4.12
        
    
  • 创建kmodule.xml文件


    
        
    


  • 创建一个测试对象UserBean
package www.wpz.dome;

public class UserBean {

    public Integer age;

    public String name;

    public UserBean(String name, Integer age) {
        this.age = age;
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

}

  • 创建规则文件rule.drl
import www.wpz.dome.UserBean

dialect  "mvel"

rule "age"
    when
        $user : UserBean(age<10 || age>60)
    then
        System.out.println("这个年龄太小,还是不太够。");
end


rule "name"
    when
        $user : UserBean(name.equals("maozedong"))
    then
        System.out.println("这个是皇帝!");
end

  • 测试类代码:
import www.wpz.dome.UserBean;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

public class Test {

    private static KieContainer container = null;
    private KieSession statefulKieSession = null;

    @org.junit.Test
    public void test(){
        KieServices kieServices = KieServices.Factory.get();
        container = kieServices.getKieClasspathContainer();
        statefulKieSession = container.newKieSession("myAgeSession");
        UserBean user = new UserBean("maozedong",12);
        statefulKieSession.insert(user);
        statefulKieSession.fireAllRules();
        statefulKieSession.dispose();

    }
}

``

 - 其中的rule文件可以细拆一下:  target  规则文件、  filter  过滤文件、 send  触发文件。

你可能感兴趣的:(java规则引擎)