关于使用开源版urule决策引擎优化性能和配置客户端集群同步生效的问题

由于在项目中配置的是开源版urule决策引擎,存储的方式是保存到数据库,这样就会导致性能跟不上去,每调一次决策引擎,都需要很长的时间,这样在项目中明显是不现实的。

优化性能,在urule的配置文件configure.properties中配置如下信息:

#数据源bean的id
urule.repository.datasourcename=dataSource
#指定数据库类型
urule.repository.databasetype=oracle
#配置本地文件
urule.repository.dir=D:/repo

#优化性能的相关配置
urule.repository.xml=
urule.decisionTree.style=new
urule.WelcomePage=
urule.knowledgeUpdateCycle=1
urule.debug=false

说明:

1、项目中即使不使用本地存储的方式,也要在配置文件中配置urule.repository.dir=D:/repo本地存储位置,否则启动会报错。

2、关于urule.knowledgeUpdateCycle的说明:

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

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

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

 3、取消调试信息输出:urule.debug=false

但是,配置了以上配置信息后,性能是上去了,这里还有个问题,对于做集群的服务,在一个客户端修改了决策规则后,并不能同时同步在没有修改的客户端上生效。

这个时候,需要配置推送客户端。

配置客户端集群同步生效

配置方式一

打开这个configure.properties文件,在其中添加一个名为“urule.resporityServerUrl”属性,比如

urule.resporityServerUrl=http://192.168.18.11:8080/urule-server
rule.resporityServerUrl=http://127.170.1.1:8080/urule-server

 这样可以实现任何一端客户端修改决策都可以同步生效。但是这种方式的缺点是写死在代码中,没有在页面控制台配置方便好用。对于如果后期更换服务器或者客户端ip更改,就得需要更改代码中的配置了,个人不是很推荐这种方式去配置。

配置方式二

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

关于使用开源版urule决策引擎优化性能和配置客户端集群同步生效的问题_第1张图片

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

关于使用开源版urule决策引擎优化性能和配置客户端集群同步生效的问题_第2张图片 

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

关于使用开源版urule决策引擎优化性能和配置客户端集群同步生效的问题_第3张图片 

点击“确定”,系统会向这些客户端推送当前发布的知识包对象 ,这样可以实现同步生效。

这种方式配置方便,不需要更改代码,推荐使用这种方式。

你可能感兴趣的:(java,urule)