美文网首页
KIE(二):Drools简单介绍

KIE(二):Drools简单介绍

作者: 用心感受世界 | 来源:发表于2018-10-23 14:30 被阅读0次

    1.规则

      规则是运作规律所遵循的法则。比如 1+1=2,红灯停,绿灯行。他们都是当满足某一些条件时,接下来要做某些事情。所以规则可以简化成 当 。。。的时候,做。。。。事。

    2.规则引擎drools

      是什么:drools是业务规则管理系统,具有基于前向链接和后向链接推理的规则引擎。

      做什么:drools可以快速可靠地评估业务规则和复杂的事件处理。规则引擎也是创建专家系统的基本构建块。

      怎么做:将业务策略从程序中抽离出来,用一套定义好的语言来编写业务规则,通过数据的输入,来决定不同的业务决策。这是drools做的内容。

    3.业务场景

      3.1.存在一个非常复杂的场景,即使对于商业专家也难以完全定义

      3.2.没有已知或定义明确的算法解决方案

      3.3.有不稳定需求,需要经常更新

      3.4.需要快速做出决策,通常是基于部分数据量

    4.规则结构

      一条规则由包名,规则名,规则的条件(left hand side),规则的结果(right hand side)构成。

    5.规则例子

    以下是一个简单的例子:基本drl文件:

    package sample
    import sample.DroolTest.Message;
    
    rule "helloWorld"
        when
        m : Message( status == Message.HELLO, myMessage : message )
        then
         System.out.println( myMessage );
                m.setMessage( "Goodbye  world" );
                m.setStatus( Message.GOODBYE );
                update( m );
    end
    
    rule "GoodBye"
        when
            Message( status == Message.GOODBYE, myMessage : message)
        then
            System.out.println(myMessage);
    end
    

    基本规则就是以上drl中的内容。上文包含了两条规则。

    6.Java中如何运用一条规则

    以下是规则构建器的创造,及规则的加载方式,规则构建库,以及规则的执行运用

    public class DroolTest {
    
            public static final void main(String[] args) {
                try {
                    // load up the knowledge base
                    KnowledgeBase kbase = readKnowledgeBase();
                    StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();//创建会话
                    KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
                    // go !
                    Message message = new Message();
                    message.setMessage("Hello World");
                    message.setStatus(Message.HELLO);
                    ksession.insert(message);//插入
                    ksession.fireAllRules();//执行规则
                    logger.close();//关闭
                } catch (Throwable t) {
                    t.printStackTrace();
                }
            }
    
            private static KnowledgeBase readKnowledgeBase() throws Exception {
                KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();//创建规则构建器
                kbuilder.add(ResourceFactory.newClassPathResource("sample/helloWorld.drl"), ResourceType.DRL);//加载规则文件,并增加到构建器
                KnowledgeBuilderErrors errors = kbuilder.getErrors();
                if (errors.size() > 0) {//编译规则过程中发现规则是否有错误
                    for (KnowledgeBuilderError error: errors) {System.out.println("规则中存在错误,错误消息如下:");
                        System.err.println(error);
                    }
                    throw new IllegalArgumentException("Could not parse knowledge.");
                }
                KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();//创建规则构建库
                kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());//构建器加载的资源文件包放入构建库
                return kbase;
            }
    
            public static class Message {
    
                public static final int HELLO = 0;
                public static final int GOODBYE = 1;
    
                private String message;
    
                private int status;
    
                public String getMessage() {
                    return this.message;
                }
    
                public void setMessage(String message) {
                    this.message = message;
                }
    
                public int getStatus() {
                    return this.status;
                }
    
                public void setStatus(int status) {
                    this.status = status;
                }
    
            }
    
    }
    

    输出的内容

    Hello World
    Goodbye  world
    

    相关文章

      网友评论

          本文标题:KIE(二):Drools简单介绍

          本文链接:https://www.haomeiwen.com/subject/lmgiwftx.html