本篇文章基于 Drools 7.5.0.Final,6.x 版本与7.x在安装上基本类似,但7.x 提供了 docker 镜像,使得 workbench 及 kie-server 的安装比6.x容易了很多倍。
本篇文章基于 Drools 7.5.0.Final,6.x 版本与7.x在安装上基本类似,但7.x 提供了 docker 镜像,使得 workbench 及 kie-server 的安装比6.x容易了很多倍。
首先需要准备 Docker 环境,Docker 的安装过程不在此赘述,可以参考官网安装教程或者菜鸟教程。安装完成后,由于 Docker 仓库在国外,下载速度可能会很慢,所以可以先配置下 Docker 官方在国内的加速器(其它的镜像加速器,如:阿里、网易等,可能没有 Drools 的镜像),配置方式参考:Docker 中国官方镜像加速。
第一步:从镜像仓库拉取 drools-workbench 的镜像文件:
docker pull jboss/drools-workbench-showcase
第二步:启动 drools-workbench 镜像:
docker run -p 8080:8080 -p 8001:8001 -d --name drools-wb jboss/drools-workbench-showcase:latest
当容器与应用都启动完成后,你就可以使用如下用户访问地址 http://localhost:8080/drools-wb 去体验 workbench 功能了。
USER PASSWORD ROLE
*********************************************
admin admin admin,analyst,kiemgmt
krisv krisv admin,analyst
john john analyst,Accounting,PM
sales-rep sales-rep analyst,sales
katy katy analyst,HR
jack jack analyst,IT
上面是 showcase 中的用户与角色,如果需要自定义用户体系,需要自己创建 Docker 镜像并对 jboss/drools-workbench 镜像进行扩展,这里不做展开,具体操作请参考Extending this image。
进入主页,点击 Design 中的 projects 链接,进入项目管理界面
点击右上角的【Add Project】进行添加项目,填写项目名称及 Maven 三件套完成项目创建。
点击创建好的项目,进入主界面,点击右上角的【Create New Asset】,选择【软件包】,创建数据对象存放的包 com.qchery.harper.fact,再创建规则文件存放的包 com.qchery.harper.rule。
所有有资源都是通过【Create New Asset】进行创建,后面将不再赘述。
选择【数据对象】进行 Fact 的创建,首先创建 Address 对象。
点击【添加字段】为当前对象添加字段,设置字段类型及描述,字段添加完成后,可以点击【源代码】查看生成的对象是否符合自己的要求,如果符合,点击【保存】即可。
创建 ApplyInfo 对象,ApplyInfo 中会包含一个 Address 对象,由此可以看出 Drools 对自定义类型的支持是很好的。
对象定义完成后,我们来创建一个简单规则,同样创建 Asset,选择【Guided 规则】,在配置规则内容前,需要先添加所依赖的数据对象
依靠刚才添加的数据对象,配置一个简单的规则如下:
配置完成后,同样可以通过【源代码】查看规则的生成情况,另外,还可以点击【校验】去保证规则可以正常编译通过:
规则编写完成后,需要测试通过才可以发布生产,在 workbench 中,测试也是可以通过配置完成的。
点击创建 Asset,选择【测试场景】,添加所依赖的数据对象,并配置测试条件与期望结果,这里,为了简单起见,我只配置了正向的测试场景,实际应用的过程中,应该还需要配置反向测试场景,保证规则的正确性。
规则发布前,需要先配置 KieBase 与 KieSession,也就是配置 kmodule.xml 文件,在 workbench 里面,kmodule.xml 文件也是通过界面配置,然后自动生成的。
点击项目主页(Create New Asset 所在页面)右上角的【Settings】按钮,再选择【知识库与会话】
进入配置界面,即可配置知识库与会话,对规则进行灵活的分组,提高规则的可复用性。
配置完成后,即可点击项目主页的【Build&Deploy】进行发布,规则会发布到本地的 maven 仓库中。
与 Workbench 的安装方式一样,需要先从仓库拉取最新镜像文件:
docker pull jboss/kie-server-showcase
拉取完成后,启动 kie-server,并链接到一个已经启动的 Workbench 上
docker run -p 8180:8080 -d --name kie-server --link drools-wb:kie_wb jboss/kie-server-showcase:latest
启动完成后,点击 Workbench 首页中【DevOps】下在 【servers】链接,即可看到刚刚发布的规则容器与注册好的 kie-server 服务器,此时只需要选择容器,并点击【启动】就可以将容器与 kie-server 服务器关联起来。
启动完成后,容器界面与服务器界面上都可以看到彼此的信息,我们可以通过 kie-server 提供的 Rest 接口查看服务器及容器的相关信息,默认的用户名密码为 kieserver/kieserver1!
,根据以上配置可以查看到的信息如下:
服务器信息:http://localhost:8180/kie-server/services/rest/server/
容器信息:http://localhost:8180/kie-server/services/rest/server/containers
在调用 Rest 接口前,需要先在本地定义一套与 WorkBench 中完全一致的数据对象,可以通过拷贝 Workbench 里面生成的源代码来快速实现,远程规则调用实现代码如下:
import com.qchery.harper.fact.Address;
import com.qchery.harper.fact.ApplyInfo;
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;
import java.util.LinkedList;
import java.util.List;
public class Main {
public static final String SERVER_URL = "http://localhost: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 = "harper_1.0.0";
public static void main(String[] args) {
// 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);
// 规则输入条件
ApplyInfo applyInfo = new ApplyInfo();
applyInfo.setAge(19);
Address familyAddress = new Address();
familyAddress.setProvince("aa");
applyInfo.setFamilyAddress(familyAddress);
// 命令定义,包含插入数据,执行规则
KieCommands kieCommands = KieServices.Factory.get().getCommands();
List> commands = new LinkedList<>();
commands.add(kieCommands.newInsert(applyInfo, "applyInfo"));
commands.add(kieCommands.newFireAllRules());
ServiceResponse results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID,
kieCommands.newBatchExecution(commands, "ksessionId"));
// 返回值读取
ApplyInfo value = (ApplyInfo) results.getResult().getValue("applyInfo");
System.out.println(value);
}
}
参考链接:
参考文档:
https://blog.csdn.net/gendlee1991/article/details/77984814
drools workbench 在wildfly上的搭建:
https://blog.csdn.net/gendlee1991/article/details/77984814
https://blog.csdn.net/lei32323/article/details/74453028
https://blog.csdn.net/u013115157/article/details/53156989
https://blog.csdn.net/u013115157/article/details/52486641
https://blog.csdn.net/sqzhao/article/details/77865956
https://blog.csdn.net/v_JULY_v/article/details/7624837
https://blog.csdn.net/Liangjun_Feng/article/details/79698809
https://blog.csdn.net/lei32323/article/details/74453028
https://blog.csdn.net/YChenFeng/article/details/74980531
https://blog.csdn.net/u013115157/article/details/53156989
https://blog.csdn.net/iteye_9584/article/details/82583105
https://bbs.csdn.net/topics/392165288
https://blog.csdn.net/Howie_zhw/article/details/73206836
https://blog.csdn.net/nan123456789/article/details/84140768
https://blog.csdn.net/lifetragedy/article/details/74280089
https://blog.csdn.net/wsdc0521/article/details/50372815
AI换脸
https://blog.csdn.net/BEYONDMA/article/details/100594136
hash表实现
https://blog.csdn.net/v_JULY_v/article/details/6256463
spring书籍:
7天学会spring+cloud教程
Spring 5 新功能:功能性 Web 框架 -
Spring Boot实战 ,丁雪丰 (译者)
Spring.in.Action.4th.Edition
springCloud参考指南
中断线程
https://blog.csdn.net/anhuidelinger/article/details/11746365
hadoop权威指南
https://www.jb51.net/books/626566.html
软件工程方法:
1、uml 设计模式 网络拓扑图 依赖关系 联系
2、模型 主要组件和主要数据(实体)的流转控制信息
3、多角色业务流程图 时序图 交互
4、数据流(工件加工流程、微服务、多出来的领域对象既代表对应服务端一个domain、协议、互操作、BO|VO|DTO|POJO、dsl、rest、webservice、dubbo、http、api)、
逻辑流(控制流、规则引擎、工作流引擎、自动化、人工智能、预测模型、java|python|shell)、状态流(除了数据相关的对象,其他需要无状态、有限状态机)
5、分层架构(复用、功能层级、组件模块) ER图(结构数据关系)物理|逻辑架构 问题域与解域(需求、概要详细设计) DDD 领域分析模式 领域分析模型 领域特定语言
6、功能、非功能需求,系统自动化运维监控(devops、k8s、质量管控、bug、需求管理、架构管理、指标优化)
7、发展,拓展性(模块组件化、方便需求变更、面向接口设计、DDD)、方便维护(代码易读、容易部署)、
容易测试(自动化测试、TDD、单元测试、集成测试)、体验好(UI、前端、UX)、响应快事务实时(后端架构技术,cap)、敏捷开发、结对编程、促进沟通、规范安全性质量报告把控、项目进度成功把控总结 UTDD ATDD BDD RBE DDD
敏捷开发:
https://www.cnblogs.com/qixuejia/p/5863216.html
https://baike.baidu.com/item/%E6%95%8F%E6%8D%B7%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/7108658?fromtitle=%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91&fromid=5618867&fr=aladdin
https://www.uperform.cn/
https://baike.baidu.com/item/%E7%BB%93%E5%AF%B9%E7%BC%96%E7%A8%8B/7526152?fr=aladdin
https://blog.csdn.net/MOY37RQW1JarN33BgZk/article/details/78879719
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E7%89%B9%E6%80%A7%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91&rsv_pq=c625ddd800079aee&rsv_t=6091%2Fq54Z3qbaeDWvRC47hvJqYiO01K%2F24yI4FI%2B2a999eIDua62ED1mWRw&rqlang=cn&rsv_enter=1&rsv_dl=ib&rsv_n=2&rsv_sug3=1
https://www.cnblogs.com/ego/articles/1760517.html
https://blog.csdn.net/tianxuhong/article/details/44919315
https://blog.csdn.net/enweitech/article/details/68944260
https://blog.csdn.net/ejinxian/article/details/70212208
https://blog.csdn.net/wangjianan7357/article/details/81592109
https://blog.csdn.net/ejinxian/article/details/70212208
https://blog.csdn.net/qq_39752804/article/details/81432645
https://blog.csdn.net/WuLex/article/details/80747165
https://blog.csdn.net/qq_35368183/article/details/84558134
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E7%B3%BB%E7%BB%9F%E6%A8%A1%E5%9E%8B%E5%9B%BE&rsv_pq=e64ab2be0001d630&rsv_t=16f3dVp%2Bo5piCkg37%2F2MQsRSPRv6wrL1bEHU%2BZhu%2F11FfueTXxIqa5B0zMU&rqlang=cn&rsv_enter=1&rsv_dl=ib&rsv_n=2&rsv_sug3=1
https://www.cnblogs.com/itsharehome/p/8120311.html
https://blog.csdn.net/zy103118/article/details/79713535
https://baike.baidu.com/item/RUP/8924595?fr=aladdin
https://blog.csdn.net/qb200903527/article/details/10056949
k8s学习:
https://blog.csdn.net/hanyajun0123/article/details/85062863
https://blog.csdn.net/bbwangj/article/details/82866927
https://blog.csdn.net/huakai_sun/article/details/82378856
https://blog.csdn.net/weixin_39686421/article/details/80353330
https://blog.csdn.net/liumiaocn/article/details/52366063
https://blog.csdn.net/weixin_43277643/article/details/83382532
https://blog.csdn.net/dfhgshgdf/article/details/80472192
https://blog.csdn.net/kangi/article/details/84957644
https://blog.csdn.net/qq_37175369/article/details/79878834
k8s实践:
https://www.kubernetes.org.cn/5480.html
https://blog.csdn.net/boling_cavalry/article/details/91346780
https://blog.csdn.net/hopeztm/article/details/78731774
https://blog.csdn.net/guanjin2834/article/details/80134025
https://blog.csdn.net/boling_cavalry/article/details/87510822
可视化数据分析:
http://baijiahao.baidu.com/s?id=1598426519975889351&wfr=spider&for=pc
tensorflow github
https://blog.csdn.net/c20081052/article/details/81902860
资料:
https://pan.baidu.com/share/init?surl=thDdka5oCgtqV0pmK88MKg
https://link.zhihu.com/?target=https%3A//github.com/ysicing/kubernetes-handbook
https://yq.aliyun.com/articles/221687
https://www.imooc.com/article/80672
https://blog.csdn.net/xichenguan/article/details/79033611
https://minikube.sigs.k8s.io/docs/start/windows/