drools規則引擎與kie-wb和kie-server遠程執行規則(7.18.0.Final)


 

 

最近研究了一下規則引擎drools。

這篇博客帶你搭建並運行一個可在線編輯,在線打包,遠程執行的規則引擎(drools)

本篇博客同時參考https://blog.csdn.net/chinrui/article/details/79018351 博客內容

1、搭建Workbench (首先保證主機聯網,有docker環境)

  docker run -p 8080:8080 -p 8001:8001 -d --name drools-wb jboss/drools-workbench-showcase:latest

  容器啟動完之后就可以訪問如下鏈接(可能docker鏡像下載有點慢。可以切換阿里雲鏡像倉庫)

  http://IP:8080/business-central/kie-wb.jsp?locale=zh_CN

界面如下:

  用戶名:admin  密碼:admin

  登錄進去之后

  點擊創建工程

 

 

 

 

   點擊創建Add Asset

 

 

 

  創建完對象點擊保存

 

  保存之后回到工程界面

  繼續創建rule,向導性規則

 

 

 

 

package com.myspace.mytest1;

rule "myrule1"
    dialect "java"
    when
        $info : mytestmodel1( sex == 0 )
    then
        $info.setName( "李雷" );
end

 

創建測試場景

 

 編輯如下測試規則

然后返回點擊build

然后點擊

2、創建 kie-server

  docker run -p 8180:8080 -d --name kie-server --link drools-wb:kie_wb jboss/kie-server-showcase:latest

  運行如上docker容器

  

  容器運行起來之后

  訪問如下鏈接http://IP:8180/kie-server/services/rest/server/

  

  在訪問鏈接 http://IP:8180/kie-server/services/rest/server/containers

 

 

 

 

  這里發現已經有了我們剛才創建的kie-server服務列表,這是我們需要創建一個運行容器,返回我們的mytest1rule

 

 

 

  發布成功之后

  然后在訪問鏈接http://IP:8180/kie-server/services/rest/server/containers

接下來上代碼開發我們的測試程序

maven項目引用依賴

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <drools.version>7.18.0.Final</drools.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-core</artifactId>
            <version>${drools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <version>${drools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-decisiontables</artifactId>
            <version>${drools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-templates</artifactId>
            <version>${drools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-api</artifactId>
            <version>${drools.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.kie.server</groupId>
            <artifactId>kie-server-client</artifactId>
            <version>${drools.version}</version>
        </dependency>

    </dependencies>

實體類

package com.myspace.mytest1;

/**
 * This class was automatically generated by the data modeler tool.
 */

public class mytestmodel1 implements java.io.Serializable {

    static final long serialVersionUID = 1L;

    private java.lang.Integer id;
    private java.lang.String name;
    private java.lang.Integer sex;

    public mytestmodel1() {
    }

    public java.lang.Integer getId() {
        return this.id;
    }

    public void setId(java.lang.Integer id) {
        this.id = id;
    }

    public java.lang.String getName() {
        return this.name;
    }

    public void setName(java.lang.String name) {
        this.name = name;
    }

    public java.lang.Integer getSex() {
        return this.sex;
    }

    public void setSex(java.lang.Integer sex) {
        this.sex = sex;
    }

    public mytestmodel1(java.lang.Integer id, java.lang.String name,
            java.lang.Integer sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "mytestmodel1 [id=" + id + ", name=" + name + ", sex=" + sex + "]";
    }

}

控制台執行代碼

package com.myspace.mytest1;


import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

import org.kie.api.KieServices;
import org.kie.api.command.Command;
import org.kie.api.command.KieCommands;
import org.kie.api.runtime.ExecutionResults;
import org.kie.server.api.marshalling.MarshallingFormat;
import org.kie.server.api.model.ServiceResponse;
import org.kie.server.client.KieServicesClient;
import org.kie.server.client.KieServicesConfiguration;
import org.kie.server.client.KieServicesFactory;
import org.kie.server.client.RuleServicesClient;


public class droolstest {

    public static final String SERVER_URL = "http://ip:8180/kie-server/services/rest/server";
    public static final String PASSWORD = "kieserver1!";
    public static final String USERNAME = "kieserver";
    public static final String KIE_CONTAINER_ID = "mytest1_1.0.0-SNAPSHOT";
    public static final String KIE_SESSION_ID = "mytest1";

    public static void main(String[] args) throws IOException {

        
        // KisService 配置信息設置
        KieServicesConfiguration kieServicesConfiguration =
                KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, 10000L);
        kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON);

        // 創建規則服務客戶端
        KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration);
        RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class);

        // 規則輸入條件
        mytestmodel1 mytest = new mytestmodel1();
        mytest.setSex(1);
        
        // 命令定義,包含插入數據,執行規則
        KieCommands kieCommands = KieServices.Factory.get().getCommands();
        List<Command<?>> commands = new LinkedList<>();
        commands.add(kieCommands.newInsert(mytest, "mytestmodel1"));
        commands.add(kieCommands.newFireAllRules());
        ServiceResponse<ExecutionResults> results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID,
                kieCommands.newBatchExecution(commands, KIE_SESSION_ID));

        // 返回值讀取
        mytestmodel1 value = (mytestmodel1) results.getResult().getValue("mytestmodel1");
        System.out.println(value.toString());
    }
    

    
}

 

執行結果

當sex為0時有如下輸出

 

 當sex等於1的時候

 

 

 這里就完成了整個流程的跑通

其中注意鏈接的 KIE_CONTAINER_ID和KIE_SESSION_ID的對應關系

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM