代码拉取完成,页面将自动刷新
相互嵌套、耦合
,与此同时,维护成本比较高,可扩展性也比较差
,我们现在想要举一个营销活动的例子,假如双十一活动,针对某些会员(比如白银会员、黄金会员、白金会员)
,每个会员级别可以领取的抵扣券是不一样的,同时每个会员的满减也是不一样的,也就是我们的运营人员在进行活动配置的时候,需要根据不同的条件组合完成响应的逻辑。这些配置是高度灵活、修改是经常发生的,并且每个时间的活动规则都可能不一样,而在活动进行的过程中,不可能随时修改代码,去处理这种动态的数据变更,所以就需要使用规则引擎。**输入输出**
关系**业务节点**
触发规则引擎的判断,然后对**规则引擎**
输入**规则集合簇**
和**输入参数**
,经过**规则引擎计算**
,输入**执行结果**
,然后根据执行结果进行相应的业务逻辑处理
,这样的话,每个业务节点就可定制业务规则,交给规则引擎去执行判断,然后拿到结果之后判断是否需要执行。**业务域**
**域加上场景**
,就确定了一个唯一的业务节点。既然可以确定唯一的业务节点,就可以进行接下来的配置
Rule Engine Calculation
进行执行,在此过程中判断当前业务节点的决策树是否构建完毕,如果构建完毕,则从本地缓存中取出数据,否则重新构建决策树,然后存储到本地缓存执行,最终返回执行结果字段名称 | 类型 | 备注 |
---|---|---|
id | object(String) | mongodb 自带id |
uuid | String | 雪花算法随机UUID |
desc | String | 功能描述 |
createTime | Date | 创建时间 |
updateTime | Date | 更新时间 |
isDelete | int | 状态 1无效,0有效 |
env | String | 环境 |
字段名称 | 类型 | 备注 |
---|---|---|
domainName | String | 域名称 |
domainCode | String | 域Code |
字段名称 | 类型 | 备注 |
---|---|---|
domainCode | String | 域Code |
scenePairs | List | 场景对 |
字段名称 | 类型 | 备注 |
---|---|---|
domainCode | String | 域Code |
metadataName | String | 元数据名称 |
metadataPairs | List | 元数据枚举值 |
字段名称 | 类型 | 备注 |
---|---|---|
domainCode | String | 域Code |
fieldName | String | 基础数据名称 |
dataType | String | 数据类型(布尔、字符串、数值、日期、元数据等) |
metadataUuid | String | 关联的元数据uuid |
scriptType | String | 脚本执行类型 |
scriptContent | String | 脚本内容 |
resultType | String | 脚本执行返回类型(只能是基本数据类型) |
字段名称 | 类型 | 备注 |
---|---|---|
domainCode | String | 域Code |
dataSourceName | String | 数据源名称 |
dataSourceType | String | 数据源类型(脚本、HTTP、SQL) |
scriptInfo | Object | 数据源为脚本的执行数据集 |
httpInfo | Object | 数据源为HTTP的执行数据集 |
sqlInfo | Object | 数据源为SQL的执行数据集 |
字段名称 | 类型 | 备注 |
---|---|---|
domainCode | String | 域Code |
sceneCode | String | 场景Code |
strategyName | String | 策略组名称 |
dataSourceUuid | String | 数据源关联uuid |
ruleType | String | 规则配置类型(默认为List) |
ruleMode | String | 规则模式 默认为simple |
ruleListInfo | Object | 规则配置类型为List时候的规则数据 |
ruleTreeInfo | Object | 规则配置类型为Tree时候的规则数据 |
字段名称 | 类型 | 备注 |
---|---|---|
id | object(String) | mongodb 自带id |
uuid | String | 雪花算法随机UUID |
desc | String | 功能描述 |
createTime | Date | 创建时间 |
updateTime | Date | 更新时间 |
isDelete | int | 状态 1有效,0无效 |
env | String | 环境 |
clientAddress | String | SDK 服务ip地址 |
clientPort | int | SDK 服务端口 |
appName | String | SDK 服务服务名字 |
registerTime | Date | 服务注册时间 |
lastUpdateTime | Date | 上次注册更新时间 |
domain | String | 注册绑定的domain |
rec-engine-sdk-http
是加载本地缓存的默认实现方式
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<!-- spring.boot.version -->
<spring.boot.version>2.2.2.RELEASE</spring.boot.version>
<!-- rec -->
<rec.version>0.0.0.3.RELEASE</rec.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<exclusions><!-- 去掉springboot默认配置 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
<version>${spring.boot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>cn.icanci.loopstack.rec</groupId>
<artifactId>rec-engine-sdk</artifactId>
<version>${rec.version}</version>
</dependency>
<dependency>
<groupId>cn.icanci.loopstack.rec</groupId>
<artifactId>rec-engine-sdk-http</artifactId>
<version>${rec.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.icanci.loopstack.rec</groupId>
<artifactId>rec-engine-sdk</artifactId>
</dependency>
<dependency>
<groupId>cn.icanci.loopstack.rec</groupId>
<artifactId>rec-engine-sdk-http</artifactId>
</dependency>
</dependencies>
rec-http-spi-load.properties
,配置如下# Service address for loading data
rec-http-request-url=http://localhost:9999
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
# 接入方需要上报自己的信息给注册中心
rec:
env: test
load: true
load-all: true
client-port: 12000
server-ips: 127.0.0.1
server-port: 9999
app-name: rec-sample-sdk-test
domain: rec
启动模块 rec-admin-views
中pom.xml的 前后端分离注释部分
启动模块 rec-admin-views
的 /resources/static
下,可直接运行前后端分离注释部分
,如果不注释,则会启动编译,打包会比较慢启动模块 rec-admin-views
的 vueboot
,执行 npm run dev
,然后浏览器会打开 http://localhost:9528/#/login
static/rec
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。