ice规则引擎==启动流程和源码分析
创始人
2024-05-17 10:02:22
0

启动

git clone代码

创建数据库ice,执行ice server里的sql,修改ice server的配置文件中的数据库信息

 启动ice server 和ice test

访问ice server     localhost:8121

新增一个app,默认给了个id为1,这个1可以看到在ice test的配置文件中指定了。

进入app ,新增一条校验链(实际是一串规则),指定它使用的 场景为recharge

点击查看详情

点击1-NODE,添加子节点

选择relation,AND

然后再点击AND添加子节点

 编写内容

{"score":100,"key":"cost"}

然后再次点击AND再添加一个子节点,confName写AmountResult

编写内容

{"value":888,"key":"uuid"}

点击发布

到ice test的ScoreFlow  和AmountResult 打个断点

发两个请求,scene为之前在页面上创建的recharge,cost=10000和cost=10,一个大于100,一个小于100,可以发现大于100的多了个返回的字段说明触发了这条规则

{"scene": "recharge","roam": {"cost": 10000,"uuid":123}
}

 

 

============================

所以可以发现,AND后面跟着的两个子节点,第一个是用来判断的规则,第二个是结果,如果第一个满足了,就会触发第二个。 怎么看满不满足,条件的阈值是在页面上JSON设置的,阈值怎么用是在ScoreFlow代码里设置的。 所以如果要自己添加功能,需要先在ice test中新建flow和result,然后再去页面上使用新的flow和result新建节点。

================================================

在修改根目录下的pom.xml文件,将远程仓库,证书,签名等都给注释掉,然后mvn install,这样就能将所有模块打包到本地仓库中。然后用IDEA分别打开ice-test和ice-server,启动,测试访问,成功。

源码分析

可以发现是基于netty的,分为server端和client端,那么client端启动的时候肯定会做些事情,所以看client端端代码。

clien端

icetest引入了ice-client-spring-boot-starter依赖,starter里引入了ice-client-spring-boot-autoconfigure,发现熟悉的spring.factories,同时ice-client-spring-boot-autoconfigure引入了ice-client依赖,ice-client又引入了ice-core依赖。ice-core中引入了netty和ice-common。

 

 

spring.factories引入了IceClientAutoConfiguration,这里面就只有个去扫描com.ice.client包底下的所有bean

 

@Configuration
@ComponentScan("com.ice.client")
public class IceClientAutoConfiguration {}

因为ice-server也引用了ice-core,所以clien端的初始化相关的功能是在ice-client中。

IceClientProperties读取了ice-test的配置文件中的配置项,

IceNioClientInit:

com.ice.client.config.IceNioClientInit#afterPropertiesSet

com.ice.core.client.IceNioClient#start创建与server的连接,并将连接注册到server端。

bootstrap.connect(host, port).sync();

server端接受到来自client端的连接请求并处理,

com.ice.server.nio.IceNioServerHandler#channelRead0

连接创建后会自动调用到client端的channelActive将该client端可以使用的叶子节点类路径发送到server端,server端页面上建规则的时候会使用

com.ice.core.client.IceNioClientHandler#channelActive 将该client端可以使用的叶子节点类路径发送到server端,请求到达server端

com.ice.server.nio.IceNioClientManager#register(int, io.netty.channel.Channel, java.lang.String, java.util.List)  server端将这个client拥有的场景和对应的规则发往client端

client收到来自server端的响应

com.ice.core.client.IceNioClientHandler#channelRead0 收到这个client拥有的场景和对应的规则

com.ice.core.client.IceNioClient#initDataReady

com.ice.core.client.IceUpdate#update

com.ice.core.cache.IceConfCache#insertOrUpdate 将这个client拥有的场景和对应的规则放入一个map   confMap中当做缓存

com.ice.core.cache.IceHandlerCache#insertOrUpdate根据刚才的confMap,生成这个client拥有的场景的handler,并将handler放入一个sceneHandlersMap当做缓存

com.ice.core.cache.IceHandlerCache#onlineOrUpdateHandler

==================================

其他的就一样了,当更新规则等,server端也会调channelRead0告知client端刷新缓存

com.ice.core.client.IceNioClientHandler#channelRead0

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...