规则引擎 ice

规则,引擎,ice · 浏览次数 : 108

小编点评

内容生成时需要带简单的排版,例如: * 使用空行将内容分隔到不同行中 * 使用缩行将内容缩到指定长度 * 使用空白行将段落合并到一个段落中 以下是一个例子,如何使用空行将内容分隔到不同行中: ``` 内容 -- 内容 -- 内容 -- 内容 ``` 使用缩行将内容缩到指定长度: ``` 内容 -- 内容 -- 内容 -- 内容 -- 内容 -- 内容 ``` 使用空白行将段落合并到一个段落中: ``` 内容 -- 内容 -- 内容 -- 内容 -- 内容 -- 内容 -- 内容 ```

正文

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

与规则引擎 ice相似的内容:

规则引擎 ice

[toc] [liteflow](https://liteflow.yomahub.com/) 更适应我们的项目使用了它 [drools](https://www.drools.org/) 感觉复杂度高些 ### 项目介绍 官网地址:http://waitmoon.com/zh 视频地址:https

IceRPC之依赖注入>快乐的RPC

作者引言 很高兴啊,我们来到了IceRPC之依赖注入>快乐的RPC,基础引导,打好基础,才能让自已不在迷茫,快乐的畅游世界。 依赖注入和IceRPC 了解 IceRPC (C#) 如何为依赖注入(DI)提供支持。 DI作为可选功能 DI的第一条规则是:不要引入对DI的依赖。 IceRPC (C#)

规则引擎Drools在贷后催收业务中的应用

本篇文章主要介绍了规则引擎的概念以及Kie和Drools的关系,重点讲解了Drools中规则文件编写以及匹配算法Rete原理。文章的最后为大家展示了规则引擎在催收系统中是如何使用的,主要解决的问题等。

规则引擎调研及初步使用

生产过程中,线上的业务规则内嵌在系统的各处代码中,每次策略的调整都需要更新线上系统,进行从需求->设计->编码->测试->上线这种长周期的流程,满足不了业务规则的快速变化以及低成本的更新试错迭代。因此需要有一种解决方案将商业决策逻辑和应用开发者的技术决策分离开,在系统运行时能去更新管理业务规则。

履约核心引擎低代码化原理与实践

业界,规则引擎是一个非常普遍的技术类工具,也有很多非常优秀的开源工具,例如Drools等,它是一种嵌入在应用程序中的组件,主要解决易变逻辑和业务耦合的问题,把易变的规则从应用程序代码中分离出来,进而提升交付效率,降低应用程序维护和可扩展性成本。

drools规则动态化实践

业务逻辑中经常会有一些冗长的判断,需要写特别多的if else,或者一些判断逻辑需要经常修改。这部分逻辑如果以java代码来实现,会面临代码规模控制不住,经常需要修改逻辑上线等多个弊端。这时候我们就需要集成规则引擎对这些判断进行线上化的管理。

Clickhouse表引擎探究-ReplacingMergeTree

作者:耿宏宇 1 表引擎简述 1.1 官方描述 MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。 ReplacingMergeTr

docker使用Open Policy Agent(OPA)进行访问控制

docker使用Open Policy Agent(OPA)进行访问控制,OPA 是一个开源的通用策略引擎,可以评估策略并做出决策,Rego 是一种用于编写策略的语言,是 OPA 的核心组成部分,docker安装OPA插件,启用OPA,OPA规则之允许docker所有操作,OPA规则之禁止docke...

分类算法(Classification Algorithm)需求记录

[toc] 比如说,在WEB扫描器场景中。一个扫描器在扫描过程中,它可以自动识别接口类型并采用相应分类规则进行漏洞检测的算法,这种通常属于一种称为"智能扫描"(Intelligent Scanning)或"漏洞扫描引擎"的技术。 这些算法利用机器学习、深度学习和模式识别等技术,通过分析网络流量、响应

火山引擎VeDI:如何高效使用A/B实验,优化APP推荐系统

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 在移动互联网飞速发展的时代,用户规模和网络信息量呈现出爆炸式增长,信息过载加大了用户选择的难度,这样的背景下,推荐系统应运而生,为用户提供个性化的内容推荐。推荐系统在不断迭代中,其算法、策略、特征、功能和用户界面时