首页 > 其他分享 >规则引擎 ice

规则引擎 ice

时间:2023-07-10 13:32:13浏览次数:39  
标签:COMMENT utf8mb4 DEFAULT ice -- 引擎 规则 NULL

目录

  • 项目介绍
  • 服务安装
  • 创建数据库(MySQL)
  • 下载安装
  • 服务(启动、停止、重启)
  • 打开后台
  • Client接入(Spring Boot)
  • 示例
  • 添加配置
  • 新增 ICE

liteflow 更适应我们的项目使用了它
drools 感觉复杂度高些

项目介绍

官网地址:http://waitmoon.com/zh 视频地址:https://www.bilibili.com/video/BV1hg411A7jx 业务中是否写了大量的 if-else?是否受够了这些 if-else 还要经常变动? 业务中是否做了大量抽象,发现新的业务场景还是用不上? 是否各种调研规则引擎,发现不是太重就是接入或维护太麻烦,最后发现还是不如硬编码? 接下来给大家介绍一款全新的开源规则引擎——ice,以一个简单的例子,从最底层的编排思想,阐述 ice 与其他规则引擎的不同;讲述 ice 是如何使用全新的设计思想,契合解耦和复用的属性,还你最大的编排自由度。

服务安装

http://waitmoon.com/zh/guide/getting-started.html

创建数据库(MySQL)

https://gitee.com/waitmoon/ice/blob/1.2.0/ice-server/src/main/resources/sql/ice.sql

CREATE DATABASE IF NOT EXISTS ice CHARACTER SET utf8mb4;

USE ice;
-- ----------------------------
-- Table structure for ice_app
-- ----------------------------
CREATE TABLE IF NOT EXISTS `ice_app` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(200) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'application name',
  `info` VARCHAR(500) COLLATE utf8mb4_bin DEFAULT '',
  `status` TINYINT(1) NOT NULL DEFAULT '1',
  `create_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------
-- Table structure for ice_base
-- ----------------------------
CREATE TABLE IF NOT EXISTS `ice_base` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(200) COLLATE utf8mb4_bin DEFAULT NULL,
  `app` INT(11) NOT NULL COMMENT 'remote application id',
  `scenes` VARCHAR(1000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'scenes(mutli scene split with ,)',
  `status` TINYINT(11) NOT NULL DEFAULT '1' COMMENT '1 online 0 offline',
  `conf_id` BIGINT(20) DEFAULT NULL,
  `time_type` TINYINT(11) DEFAULT '1' COMMENT 'see TimeTypeEnum',
  `start` DATETIME(3) DEFAULT NULL,
  `end` DATETIME(3) DEFAULT NULL,
  `debug` TINYINT(4) NOT NULL DEFAULT '1',
  `priority` BIGINT(20) DEFAULT '1',
  `create_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_at` DATETIME(3) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `update_index` (`update_at`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------
-- Table structure for ice_conf
-- ----------------------------
CREATE TABLE IF NOT EXISTS `ice_conf` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `app` INT(11) NOT NULL COMMENT 'remote application id',
  `name` VARCHAR(50) COLLATE utf8mb4_bin DEFAULT NULL,
  `son_ids` VARCHAR(1000) COLLATE utf8mb4_bin DEFAULT NULL,
  `type` TINYINT(4) NOT NULL DEFAULT '6' COMMENT 'see NodeTypeEnum',
  `status` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '1 online 0 offline',
  `inverse` TINYINT(4) NOT NULL DEFAULT '0' COMMENT 'make true->false false->true',
  `conf_name` VARCHAR(1000) COLLATE utf8mb4_bin DEFAULT '' COMMENT 'leaf node class name',
  `conf_field` VARCHAR(5000) COLLATE utf8mb4_bin DEFAULT '' COMMENT 'leaf node json config',
  `forward_id` BIGINT(20) DEFAULT NULL,
  `time_type` TINYINT(11) NOT NULL DEFAULT '1' COMMENT 'see TimeTypeEnum',
  `start` DATETIME(3) DEFAULT NULL,
  `end` DATETIME(3) DEFAULT NULL,
  `debug` TINYINT(4) NOT NULL DEFAULT '1',
  `error_state` TINYINT(4) DEFAULT NULL COMMENT 'NULL/3-SHUTDOWN, 0-CONTINUE_FALSE, 1-CONTINUE_TRUE, 2-CONTINUE_NONE',
  `create_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_at` DATETIME(3) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `update_index` (`update_at`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------
-- Table structure for ice_conf_update
-- ----------------------------
CREATE TABLE IF NOT EXISTS `ice_conf_update` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `app` INT(11) NOT NULL COMMENT 'remote application id',
  `ice_id` BIGINT(20) NOT NULL,
  `conf_id` BIGINT(20) NOT NULL,
  `name` VARCHAR(50) COLLATE utf8mb4_bin DEFAULT NULL,
  `son_ids` VARCHAR(1000) COLLATE utf8mb4_bin DEFAULT NULL,
  `type` TINYINT(4) NOT NULL DEFAULT '6' COMMENT 'see NodeTypeEnum',
  `status` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '1 online 0 offline',
  `inverse` TINYINT(4) NOT NULL DEFAULT '0' COMMENT 'make true->false false->true',
  `conf_name` VARCHAR(1000) COLLATE utf8mb4_bin DEFAULT '' COMMENT 'leaf node class name',
  `conf_field` VARCHAR(5000) COLLATE utf8mb4_bin DEFAULT '' COMMENT 'leaf node json config',
  `forward_id` BIGINT(20) DEFAULT NULL,
  `time_type` TINYINT(11) NOT NULL DEFAULT '1' COMMENT 'see TimeTypeEnum',
  `start` DATETIME(3) DEFAULT NULL,
  `end` DATETIME(3) DEFAULT NULL,
  `debug` TINYINT(4) NOT NULL DEFAULT '1',
  `error_state` TINYINT(4) DEFAULT NULL COMMENT 'NULL/3-SHUTDOWN, 0-CONTINUE_FALSE, 1-CONTINUE_TRUE, 2-CONTINUE_NONE',
  `create_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_at` DATETIME(3) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `update_index` (`update_at`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------
-- Table structure for ice_push_history
-- ----------------------------
CREATE TABLE IF NOT EXISTS `ice_push_history` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `app` INT(11) NOT NULL,
  `ice_id` BIGINT(20) DEFAULT NULL,
  `reason` VARCHAR(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `push_data` LONGTEXT COLLATE utf8mb4_unicode_ci,
  `operator` VARCHAR(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `create_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

-- ----------------------------
-- v1.2.0
-- table ice_conf add column error_state if not exist
-- ----------------------------
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      table_name = 'ice_conf'
      AND table_schema = DATABASE()
      AND column_name = "error_state"
  ) > 0,
  "SELECT 1",
  "ALTER TABLE ice_conf ADD error_state tinyint(4) DEFAULT NULL COMMENT 'NULL/3-SHUTDOWN, 0-CONTINUE_FALSE, 1-CONTINUE_TRUE, 2-CONTINUE_NONE';"
));
PREPARE iceConfAlterIfNotExists FROM @preparedStatement;
EXECUTE iceConfAlterIfNotExists;
DEALLOCATE PREPARE iceConfAlterIfNotExists;

-- ----------------------------
-- v1.2.0
-- table ice_conf_update add column error_state if not exist
-- ----------------------------
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      table_name = 'ice_conf_update'
      AND table_schema = DATABASE()
      AND column_name = "error_state"
  ) > 0,
  "SELECT 1",
  "ALTER TABLE ice_conf_update ADD error_state tinyint(4) DEFAULT NULL COMMENT 'NULL/3-SHUTDOWN, 0-CONTINUE_FALSE, 1-CONTINUE_TRUE, 2-CONTINUE_NONE';"
));
PREPARE iceConfUpdateAlterIfNotExists FROM @preparedStatement;
EXECUTE iceConfUpdateAlterIfNotExists;
DEALLOCATE PREPARE iceConfUpdateAlterIfNotExists;

下载安装

http://waitmoon.com/downloads/

[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir ice
# 创建目录
[root@localhost opt]# cd ice
# 下载安装包
[root@localhost ice]# wget http://waitmoon.com/downloads/ice-server-1.2.0.tar.gz
# 解压
[root@localhost ice]# tar -xzvf ice-server-*.tar.gz
ice-server-1.2.0/
ice-server-1.2.0/ice-server.jar
ice-server-1.2.0/logs/
ice-server-1.2.0/logs/ice-server.log
ice-server-1.2.0/application-prod.yml
ice-server-1.2.0/ice.sh
# 编辑配置文件,修改数据库配置
[root@localhost ice]# vi ice-server-1.2.0/application-prod.yml

修改配置(application-prod.yml)

server:
  port: 8121 #端口
spring:
  datasource: #数据库配置
    url: jdbc:mysql://127.0.0.1:3306/ice?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false
    username: username
    password: password
    initialization-mode: always
ice:
  port: 18121 #与客户端通信端口
#  ha: #高可用配置,当前默认支持zookeeper
#    address: localhost:2181,localhost:2182,localhost:2183
  pool: #线程池配置(用于更新client)
    core-size: 4
    max-size: 4
    keep-alive-seconds: 60
    queue-capacity: 60000

服务(启动、停止、重启)

启动 sh ice.sh start 停止 sh ice.sh stop 重启 sh ice.sh restart

打开后台

输入地址:http://localhost:8121/

规则引擎 ice_规则引擎

Client接入(Spring Boot)

POM

<dependency>
  <groupId>com.waitmoon.ice</groupId>
  <artifactId>ice-client-spring-boot-starter</artifactId>
  <version>1.2.0</version>
</dependency>
<!--高可用模式-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>5.2.1</version>
</dependency>

示例

添加配置

规则引擎 ice_规则引擎_02


application.yml

server:
  port: 8082


ice: #ice client配置
  app: 1 #与后台配置app对应
#  server: zookeeper:localhost:2181,localhost:2182,localhost:2183 #server高可用配置
  server: 172.16.3.64:18121 #server 地址(serverHost:serverPort) 服务中配置的端口
  scan: com.ice.test #用于扫描叶子节点,多个包用','分隔(默认扫描全部,扫描全部会拖慢应用启动速度)
  pool: #线程池配置(用于并发关系节点)
    parallelism: -1 #默认-1,≤0表示采用默认配置

规则引擎 ice_ico_03

新增 ICE

当 recharge 发生的时候触发

规则引擎 ice_ci_04


规则引擎 ice_ci_05


规则引擎 ice_ico_06


规则引擎 ice_规则引擎_07

视频:https://www.bilibili.com/video/BV1Q34y1R7KF



标签:COMMENT,utf8mb4,DEFAULT,ice,--,引擎,规则,NULL
From: https://blog.51cto.com/u_15116285/6675631

相关文章

  • udev规则
    1,Linux下udev详细介绍_八点半路灯下的行者的技术博客_51CTO博客一、udev简介udev是 Linux2.6内核里的一个功能,它替代了原来的devfs,成为当前 Linux 默认的设备管理工具。udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设备文件。不像之前的设备管理工......
  • 编译运行Secure Value Recovery Service v2
    下载项目gitclonehttps://github.com/signalapp/SecureValueRecovery2.git 编译makedockersh报错 修改DockerfileARGPROTOC_GEN_GO_GITREV=6875c3d7242d1a3db910ce8a504f124cb840c23aRUNgoenv-wGOPROXY=https://goproxy.cn,directRUNgoinstallgoogle.......
  • DjangoORM_choices字段get_字段_display()显示值
    示例:模型定义classmsg(models.Model):choice=((1,'技术部'),(2,'行政'),(3,'人事'),(4,"财务"),)group=models.IntegerField(choices=choice)想要获取元组的值,则使用下面的方法get_grou......
  • 火山引擎VeDI落地消费行业数据飞轮,提出“四更”新主张
    7月6日,火山引擎数智平台(VeDI)《全链路增长:数据飞轮转动消费新生力》主题活动在北京举办,会上分享了行业、企业、产品视角下的数据飞轮实践,并针对消费行业提出业务应用“四更”新主张:“更懂业务”、“更会决策”、“更准触达”和“更快行动”。 数据飞轮,是火山引擎基于字节跳动10......
  • transmission提示"No space left on device"错误
    通过df-h发现根目录空间已满通过du-h-x--max-depth=1找到/var/cache/apt/archives和/lib/modules两个目录占用较大。/var/cache/apt/archives的清理:sudoapt-getclean/lib/modules的清理:先看一下当前使用的版本:uname-a使用命令查看目前已经安装的内核:dpkg--get-s......
  • Spring中的Controller和Service是线程安全的吗?我有点懵
    结论:不是线程安全的Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究。Spring的bean作用域(scope)类型singleton:单例,默认作用域。prototype:原型,每次创......
  • 编译运行ContactDiscoveryService-Icelake
    下载gitclonehttps://codeup.aliyun.com/6306306f95064d67d44656e5/lxr1907/ContactDiscoveryService-Icelake.git或github地址gitclonehttps://github.com/signalapp/ContactDiscoveryService-Icelake按照Readme安装Buildinggitsubmoduleinitgitsubmoduleupda......
  • 浏览器扩展 service-worker中如何访问http请求
    参考:https://stackoverflow.com/questions/71443428/how-can-i-make-an-http-request-in-the-service-worker-chrome-extensionfetch文档:https://developer.mozilla.org/en-US/docs/Web/API/fetch因为service-worker没有没有运行到普通的环境,普通的node库也用不了,所以需要使用......
  • 持久化iptables规则
    一、对iptables作必要的修改;二、将iptables规则保存到文件中:iptables-save>/etc/firewall.conf三、新建一个脚本/etc/network/if-up.d/import-iptables:#!/bin/shiptables-restore</etc/firewall.conf加上可执行权限:chmod+x/etc/network/if-up.d/import-iptabl......
  • 通过在本地项目中添加服务引用访问外部WebService项目接口
    访问外部WebService项目接口的第二种方式就是通过在本地项目中添加服务引用。以下学习验证过程,通过在本地建立一个winfrom项目,通过按钮点击,触发调用接口,执行代码处理逻辑,并在文本显示区域显示最终拿回的数据。(1)在Visualstudio新建一个winfrom项目: (2)右键项目,添加服务应用,填......