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

规则引擎 ice

时间:2023-07-07 09:00:30浏览次数:47  
标签:COMMENT utf8mb4 DEFAULT ice -- 引擎 规则 NULL

目录

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/
image

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>

示例

添加配置

image
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表示采用默认配置

image

新增 ICE

当 recharge 发生的时候触发
image
image
image
image

文档:http://waitmoon.com/zh/guide/#举例
视频:https://www.bilibili.com/video/BV1Q34y1R7KF

标签:COMMENT,utf8mb4,DEFAULT,ice,--,引擎,规则,NULL
From: https://www.cnblogs.com/vipsoft/p/17463223.html

相关文章

  • 存储引擎,SQL优化
    --存储引擎和sql优化--MySQL5.5默认的存储引擎是MyISAM5.6开始是InnoDB--InnoDB事务行级锁外键--MyISAMx表级锁x--MyISAM适合对事务不做要求的业务系统,可以容忍少部分数据的丢失(其优势是访问快,以select,insert为主的应用基本上可以使用)--......
  • D. Catowice City--(2-sat)
    D.CatowiceCity--(2-sat)2-sat简介也就是有0/1两种状态,最后必须要每个人有一种状态,并且选够n个。一般是设立两个点x,x+n然后判断是否有矛盾。不同这题建图后会发现x和x+n这两个图是没有交集的,所以只需要建立一个图。至于是人还是猫,只需要确定最后一个,就可以了,也就是color最......
  • 多领域应用落地,火山引擎ByteHouse加速云数仓升级
     更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,火山引擎数智平台VeDI直播活动「超话数据」在线举办,来自火山引擎的产品及解决方案专家分享了以ByteHouse为代表的云数仓产品在字节跳动的演进过程、关键技术以及最佳实践,并通过......
  • 办公室规则制度账号密码(测试)
    办公室规则制度账号密码(测试)办公室规则制度账号密码(测试)办公室规则制度账号密码(测试)办公室规则制度账号密码(测试)办公室规则制度账号密码(测试)办公室规则制度账号密码(测试)办公室规则制度账号密码(测试)办公室规则制度账号密码(测试)办公室规则制度账号密码(测试)办公室规则制度账......
  • 【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed
    问题描述PHP应用突然遇见了500 Thepagecannotbedisplayedbecauseaninternalservererrorhasoccurred.错误,但是如果访问一个静态HTML页面,就可以成功。只要是PHP页面,就是500。 问题解答登录AppService的Kudu站点,查看日志发现一句:  scriptProcessorcouldnotb......
  • 十一、Sentinel之系统规则
    Sentinel系统自适应保护从整体维度对应用入口流量进行控制,结合应用的Load、总体平均RT、入口QPS和线程数等几个维度的监控指标,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。一、背景在开始之前,先回顾一下Sentinel做......
  • 6月《中国数据库行业分析报告》已发布,首发空间、搜索引擎数据库【全球产业图谱】
    为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生态发展,目前已更至第十四期,并发布了共计1......
  • Spring Boot中Service层依赖注入问题随笔
    问题描述: Controller 层方法为 static 静态,引入 Service 层时使用 @Autowired 注解自动装配,Controller层方法里无法调用Service层,于是加static修饰Service层的注入产生错误:调用Service层进行数据库操作时,注入的Service层报空指针异常( NullPointerException )......
  • WPS Office 2023 Beta 内测版本全新体验。
    此次要给大家安利的是WPSOffice2023年最新测试版,2023夏季更新,样式大变样,有在使用WPS的网友可用更新体验一波。  内测版本下载地址 WPSOffice2023Beta全新视觉全新的版本中设计目标是为用户创造一个沉浸式的良好办公体验,让用户能够在WPS中便捷与轻松实现自己......
  • Mysql进阶篇(一)之存储引擎
    一.MySQL体系结构1.连接层最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可......