Skip to end of metadata
Go to start of metadata

URule2技术交流QQ群及在线体验示例

在线体验示例:http://112.124.15.63:8084/ 为了不同用户操作互不影响,需要注册账号登录体验操作。

URule2技术交流QQ群:423339793

URule2规则引擎产品教学视频:https://pan.baidu.com/s/1oAeJeCM,密码:evsk


运行模式 

     URule支持两种运行模式,既嵌入模式和独立服务模式。所谓的嵌入模式就是将URule嵌入到目标应用当中运行,这种模式的特点部署起来简单、方便,便于系统开发与调试;独立服务模式就是将URule打包成一个和独立的应用单独部署,我们的业务系统则通过远程方式获取URule Server中定义的知识包进行计算,独立服务模式适用于多应用、集群部署环境下使用。

       在之前介绍的内容当中,通过2.安装与配置一节介绍创建好项目,所有示例都是在这个项目中完成,这就是一个典型的嵌入式运行URule的方式,在嵌入式模式下URule相关Jar包与业务应用一起打包,作为一个应用来进行部署,这种模式结构比较简单,开发、部署起来都比较容易。

       再来看看独立服务模式示意图:


       在独立服务模式下,包含URule Console模块的应用被部署成一个独立的Server,在这个Server上创建规则项目,在项目中根据业务需求添加决策集、决策表、决策树、评分卡、决策流等,再把这些文件打包到知识包中,最后通过HTTP协议暴露给各个客户端业务系统使用。

独立服务模式下客户端获取服务端知识包的方式

在独立服务模式下,URule Server上给客户端提供的是若干个已经构建好的知识包对象,当有客户端需要进行规则计算时,它会检查当前客户端中配置的“urule.knowledgeUpdateCycle”属性值,如果为0,那么就直接请求URule Server获取指知识包;如果为1,那么它会首先检查客户端本地缓存当中是否存在指定的知识包,如果存在,就取本地缓存中的,如果不存在,则到URule Server下请求指定的知识包,然后将请求到的知识包缓存到客户端内存中,这样下次就不再到URule Server上下载;如果“urule.knowledgeUpdateCycle”属性值大于1,那么客户端会首先检查本地缓存中是否存在指定的知识包,如果存在,那么就拿当前时候与本地缓存中的知识包的时间戳进行比较,如果小于“urule.knowledgeUpdateCycle”属性值,那么就直接取这个知识包,如果大于它,那么就到URule Server上取对应的知识包对象,取到后更新客户端本地缓存中的对应知识包对象。

搭建URule Server应用

       搭建URule Server应用的与2.安装与配置中介绍的完全相同,就是在一个普通的java web应用中将URule Console模块添加进去。需要注意的是,在URule Server应用搭建好了之后,要保证“/urule/loadknowledge”这个URL在可以匿名访问,比如输入类似下面的地址,看看应用会有什么样的响应。

URL

http://localhost:8080/urule-server/urule/loadknowledge

       如果看到类似下图的提示界面,那么就说明“/urule/loadknowledge”这个URL在可以匿名访问,是OK的。

       如果出现我们应用中的登录界面之类,那就说明“/urule/loadknowledge”这个URL在不能匿名访问,需要我们再做进一步配置,使“/urule/loadknowledge”URL在可以匿名访问。做好这个工作,那么URule Server的搭建工作就完成了,下面我们看看如果配置客户端应用。

配置URule客户端应用

       配置客户端应用,首先要解决的是如果将URule客户端所需要的jar包添加到项目中,这里我们分maven项目以及非maven项目分别进行讨论。

maven项目配置

       如果当前客户端是基于maven的项目,那么我们需要在其pom.xml中添加以下依赖

urule-console的依赖配置

       可以看到,在客户端当中就不再需要urule-console模块了,只需要一个urule-core模块即可。

操作提示

实际使用中,可以在网页中打开https://oss.sonatype.org/ ,查询并查看最新的urule-core-2.x的具体版本信息,以确定在依赖中version位置要输入的版本号信息。

       到这里,pom的配置就完成了,我们再来看看一个标准的非maven的Web项目如何配置成URule客户端。

非maven项目配置

       如果是一个非maven普通的java web项目,添加URule客户端就是将urule-core的jar包及其依赖的第三方jar包放到客户端应用的/WEB-INF/lib目录下即可,urule-core的jar包我们可以到https://oss.sonatype.org/上下载最新的urule-core-2.x的jar包,对于依赖的第三方jar包,可以点击此处下载

加载spring配置文件

       URule客户端所需要的jar包添加到客户端项目中后,接下来我们还需要加载urule-core模块中的spring配置文件。urule-core模块中的spring配置文件位于classpath根下,名为urule-core-context.xml。

       如果我们的客户端项目没有采用spring框架,那么可以在web.xml中添加如下所示Listener来加载urule-core模块中的spring配置文件:

web.xml中加载urule-console的spring配置文件

       如果我们的项目也采用了spring框架,那么只需要打开项目中任意一个spring配置文件,在其中添加如下配置即可:

context.xml文件内容

       这样urule-core的spring配置文件的加载配置就完成了。

配置web.xml

       对于URule Server来说,如果在规则项目中配置了URule的客户端地址,那么在知识包发布时会自动推送到这些客户端。所以对于我们的URule客户端来说,还需要配置一个可以接收URule Server推送的知识包的Servlet。打开项目的web.xml,在其中添加如下servlet配置:

接收服务端推送决策包的Servlet配置

配置服务器地址

       对于URule客户端应用来说,在进行规则计算时,如果客户端本地缓存没有相应的知识包,那么它会到URule Server上请求对应的知识包,要给URule客户端应用配置对应的URule Server地址,我们需要添加一个properties文件,比如在项目的WEB-INF目录下新建一个名为configure的properties文件,然后在我们项目中任意一个spring配置文件中添加如下配置加载这个properties文件:

属性文件配置

关于urule.props

urule.props这个bean,在2.安装与配置一节有介绍。

       打开这个configure.properties文件,在其中添加一个名为urule.resporityServerUrl”属性,比如 urule.resporityServerUrl=http://192.168.18.11:8080/urule-server ,就表明我们为当前URule客户端应用配置的URule Server为“http://192.168.18.11:8080/urule-server”,这样在进行规则计算时,如果客户端本地缓存没有相应的知识包,那么它会到http://192.168.18.11:8080/urule-server上请求对应的知识包。

       到这里,URule客户端的配置就全部完成了,最后我们再来看看如何在URule Server上配置客户端,以实现在Server上发布知识包自动推送到对应的客户端的功能。

URule Server上客户端配置

       打开URule的控制台,在规则项目中右键,在弹出的菜单中选择“配置接收推送客户端”,就可以打开客户端配置页面,如下图:

       我们可以添中多个客户端,这样在当前项目发布知识包时就可以自动推送到这里的客户端上,如下图:

       配置完成后,点击当前项目的“知识包”节点,选择任意一个知识包,点击工具栏上“发布当前知识包”按钮,可以看到有如下类型的提示:

        点击“确定”,系统会尝试向这些客户端推送当前发布的知识包对象,如果这些客户端是存在的,就可以发布成功,这样对应的客户端本地缓存中就会存储这个发布的知识包对象。

关于推送知识包

前面我们介绍了在URule客户端中配置“urule.knowledgeUpdateCycle”属性的含义及目的,一旦我们在URule Server中配置了客户端地址,那么知识包每次发布都会被推送到这些客户端。这样在生产环境下,对于客户端来说,“urule.knowledgeUpdateCycle”属性值只要设置成1即可,也就是每次都在客户端本地缓存中查找目标知识包是否存在,如果存在直接使用。如果知识包有更新,URule Server会动推送到目标客户端,对于URule客户端来说直接从本地缓存中就可以取到最新的知识包,这样可以剔除所有不必要的客户端与服务端的交互,节省网络资源,同时可以大幅提高客户端规则计算性能。