.netrulesengine规则引擎使用(代码片段)

シ゛甜虾 シ゛甜虾     2022-12-27     414

关键词:

        规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。比较常见的业务规则引擎有Drools、VisualRules 和iLog。这里介绍另外一个C#开源工具RulesEngine。下面通过一个例子来他如何使用。

       假设一个设备时检测管道压力值的,如果管道压力超过设定值,就立即报警,检测周期假设值1分钟一次,那么如果压力值超过设定值,系统就会每隔一分钟就会产生一个报警,报警数量太多。

        如果要求超过设定值了报警,然后在5分钟内不在报警,并且如果5分钟后,压力值仍然超过设定值,但是没有高于设定值的20%,系统不报警,超过20%再报警。

        上面的例子,很典型也很常见,如果上面满足不了需求了,还要增加压力的斜率限制,要是总改代码是不是很烦,有了RulesEngine这些问题统统都很easy.

        创建工程,使用Nuget添加RulesEngine

添加如下代码

using Newtonsoft.Json;
using RulesEngine.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RulesEngineTest

    class Program
    
        static async Task Main(string[] args)
        

            //模拟用户的输入内容
            var inputValue = new InputValue
            
                TimeDifference = 300,
                CurrentValue = 1.21,
                HistoryValue = 1.0
            ;

            //定义规则
            var rulesStr = @"[
                    ""WorkflowName"": ""InputValueWorkflow"",
                    ""Rules"": [
                      
                        ""RuleName"": ""CheckTimeDifference"",
                        ""ErrorMessage"": ""间隔时间要大于300秒."",
                        ""ErrorType"": ""Error"",
                        ""RuleExpressionType"": ""LambdaExpression"",
                        ""Expression"": ""TimeDifference > 300""
                      ,
                       
                        ""RuleName"": ""CheckValueGradient"",
                        ""ErrorMessage"": ""梯度值要大于20%."",
                         ""ErrorType"": ""Error"",
                        ""RuleExpressionType"": ""LambdaExpression"",
                        ""Expression"": ""((CurrentValue - HistoryValue)/HistoryValue) > 0.2""
                      
                    ]
                  ] ";

            //反序列化Json格式规则字符串
            var workflowRules = JsonConvert.DeserializeObject<List<WorkflowRules>>(rulesStr);

            //初始化规则引擎
            var rulesEngine = new RulesEngine.RulesEngine(workflowRules.ToArray());

            //使用规则进行判断,并返回结果
            List<RuleResultTree> resultList = await rulesEngine.ExecuteAllRulesAsync("InputValueWorkflow", inputValue);

            //返回结果并展示
            foreach (var item in resultList)
            
                Console.WriteLine("验证成功:0,消息:1", item.IsSuccess, item.ExceptionMessage);
            

            Console.ReadLine();
        
    

    public class InputValue
    
        public double CurrentValue  get; set; 
        public double HistoryValue  get; set; 
        public int TimeDifference  get; set;      //距离上一个报警的时间差(ms)
    

运行结果

如果设置TimeDifference = 301

增加梯度效验

 
   ""RuleName"": ""CheckValueSlope"",
   ""ErrorMessage"": ""每秒压力变化要超过0.001."",
   ""ErrorType"": ""Error"",
   ""RuleExpressionType"": ""LambdaExpression"",
   ""Expression"": ""((CurrentValue - HistoryValue)/TimeDifference) > 0.001""

 

规则引擎drools介绍使用及springboot整合drools(代码片段)

规则引擎Drools介绍、使用及SpringBoot整合Drools一、Drools介绍1.1优点1.2架构1.2.1Drools引擎的核心组件1.2.2规则引擎工作流程简述1.3Drools语法1.3.1规则文件1.3.1.1.规则详情1.属性详情2.条件部分-LHS3.结果部分-RHS1.3.1.2Drools关键词1.3.1.3Drools... 查看详情

什么时候使用规则引擎drools

参考技术A规则引擎一般是一下情况使用1.为提高效率,管理流程必须自动化,即使现代商业规则异常复杂。2.市场要求业务规则经常变化,IT系统必须依据业务规则的变化快速、低成本的更新。3.为了快速、低成本的更新,业务人... 查看详情

规则引擎drools的使用(代码片段)

引入maven<dependency><groupId>org.drools</groupId><artifactId>drools-templates</artifactId><version>7.14.0.Final</version></dependency><dependency>& 查看详情

规则引擎选型及简单应用

规则引擎实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。规则引擎具体执行可以分为接受数据输入,解释业务规则,根据业务规则做出业务决策几个过程,使用规则引擎可以把复杂、冗余... 查看详情

规则引擎easyrules介绍,应用及示例(代码片段)

浅析EasyRules规则引擎轻量级规则引擎EasyRulesJava规则引擎EasyRules一、EasyRules介绍1.1概述EasyRules是一个简单而强大的Java规则引擎,提供以下功能:轻量级框架和易于学习的API基于POJO的开发与注解的编程模型定义抽象的业务... 查看详情

drrols规则引擎

1.什么是规则引擎?  规则引擎是一种嵌套在应用程序中的组件,它实现了将业务规则从应用程序代码中分离出来。规则引擎使用特定的语法编写业务规则,规则引擎可以接受数据输入、解释业务规则、并根据业务规则做出相... 查看详情

golang规则引擎原理及实战(代码片段)

本文主要介绍规则引擎在golang中的使用,将首先介绍golang中主要的规则引擎框架,然后利用golang原生的parser搭建一个简单的规则引擎实现基本的bool表达式解析工作。 背景随着业务代码的不断迭代,诞生出了越来越多... 查看详情

golang规则引擎原理及实战(代码片段)

本文主要介绍规则引擎在golang中的使用,将首先介绍golang中主要的规则引擎框架,然后利用golang原生的parser搭建一个简单的规则引擎实现基本的bool表达式解析工作。 背景随着业务代码的不断迭代,诞生出了越来越多... 查看详情

规则引擎clara-rules(代码片段)

本文的主题是规则引擎,主要内容包括规则引擎的实现算法rete算法,clojure开源的规则引擎clara-rules对规则的处理方式和特点,以及clojureedn文件格式处理等内容。(在一段时间的思考之后,发现本文还是越写越... 查看详情

golang规则引擎原理及实战(代码片段)

本文主要介绍规则引擎在golang中的使用,将首先介绍golang中主要的规则引擎框架,然后利用golang原生的parser搭建一个简单的规则引擎实现基本的bool表达式解析工作。 背景随着业务代码的不断迭代,诞生出了越来越多... 查看详情

java规则引擎--drools

Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。 本文所使用的demo已上传 http... 查看详情

规则引擎的应用

java开源的规则引擎有:Drools、EasyRules、Mandarax、IBMILOG。使用最为广泛并且开源的是Drools。     规则引擎的优点声明式编程规则可以很容易地解决困难的问题,并得到解决方案的验证。与代码不同,规则以较不复杂的语... 查看详情

什么时候不应该使用规则引擎? [关闭]

】什么时候不应该使用规则引擎?[关闭]【英文标题】:WhenshouldyouNOTuseaRulesEngine?[closed]【发布时间】:2010-10-2023:36:15【问题描述】:我有一个相当不错的使用规则引擎的优点列表,以及使用它们的一些原因,我需要的是你不应该... 查看详情

我应该使用啥规则引擎? [关闭]

】我应该使用啥规则引擎?[关闭]【英文标题】:WhatruleengineshouldIuse?[closed]我应该使用什么规则引擎?[关闭]【发布时间】:2010-09-0514:48:54【问题描述】:有哪些最好或最受欢迎的规则引擎?我还没有确定编程语言,所以告诉我... 查看详情

drools规则引擎一文读懂(代码片段)

目录一、Drools简介电商平台的促销活动规则引擎Drools简介二、Drools快速入门 电商平台促销积分规则开发实现三、Drools规则引擎构成及其核心类Drools规则引擎构成Drools规则引擎概念四、Drools基础语法规则文件构成 规则体语法结... 查看详情

什么事规则引擎

规则引擎一、规则引擎概述1.1什么是规则引擎1.2使用规则引擎的优势1.3规则引擎应用场景一、规则引擎概述1.1什么是规则引擎规则引擎,全称为业务规则管理系统,英文名为BRMS(即BusinessRuleManagementSystem)。规则引擎的主要... 查看详情

开源业务规则引擎jbossdrools

Drools是什么?规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决... 查看详情

java规则引擎及jsr-94[转]

规则引擎简介     Java规则引擎是推理引擎的一种,它起源于基于规则的专家系统。     Java规则引擎将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。Java规则引... 查看详情