这是第二后 一系列更新的Kogito主动性和我们的努力,使Drools的云。 在这篇文章中,我们将深入研究规则单元的细节,并向您展示为什么我们对它们感到兴奋。

规则的全包执行模型

如果您一直在仔细检查Drools手册,以在每个最新发行版中寻找新功能,则您可能已经注意到,该术语
统治部队已经坐在那里一段时间,这是一项极为实验性的功能 。 简而言之,规则单元既是规则的模块又是执行单元 —之所以不称其为模块是为了避免与JVM模块混淆。 在Kogito,我们正在重新研究并扩展我们的原始原型。

规则单元收集一组规则以及对该规则所作用的工作存储器的描述。 工作存储器的描述被编写为带有DataSource字段的常规Java类。 每个数据源代表工作存储器的类型分区 ,并且存在具有不同功能的不同类型的数据源。 例如,在下面的示例中,我们使用了仅附加数据源,称为
数据流。

public class MonitoringService implements RuleUnitMemory {private final DataStream<Event> events = DataSource.createStream();private final DataStream<Alert> alerts = DataSource.createStream();
}

给定规则单元的规则与单元声明一起收集在DRL文件中

package org.kie.kogito.rules.alerting
unit MonitoringService
rule IncomingEvent when// matches when a temperature higher than 30 °C is registered (OOPath syntax)$e : /events # Temperature[ value >= 30 ] // Temperature is an Event subclass
thenSystem.out.println("incoming event: "+ $e.getMessage());alerts.append( new WarningHighTemperature($e) );
end

单位中的每个规则对相应类中已声明的所有数据源具有可见性。 实际上,一个单元的类和DRL文件的集合构成一个整体 :您可以将这样的整体视为
一个单一的 ,其中字段全局范围内的全局变量方法规则 。 实际上,字段的使用取代了DRL全局变量的使用。


规则单元被提交给调度程序执行 规则单元可以决定产生其执行给其他单位的规则,有效地将其付诸实施。 例如:

rule IncomingEvent when// matches when a temperature higher than 30 °C is registered (OOPath syntax)$e : /events # Temperature[ value >= 30 ] // Temperature is an Event subclass
then// Suspend execution of this unit, yield to the HighTemperatureUnitHighTemperatureUnit.createInstance(events).run();
end

但是规则单元也可能处于长期运行状态 。 在这种情况下,
其他规则单元可以同时在同一时间运行; 由于可以跨单元共享数据源,因此可以通过交换消息来协调单元。


考虑以下示例:

package org.kie.kogito.rules.alerting
unit MonitoringService
rule IncomingEvent when// matches when a temperature higher than 30 °C is registered (OOPath syntax)$e : /events # Temperature[ value >= 30 ] // Temperature is an Event subclass
thenSystem.out.println("incoming event: "+ $e.getMessage());alerts.append( new WarningHighTemperature($e) );
end

规则单元以某种方式充当交换消息的“参与者” 。 但是,以一种非常独特的方式,规则单元允许执行更复杂的执行链,这适合基于规则的推理。 例如,
考虑一下Akka手册中的示例

override def receive: Receive = {case RecordTemperature(id, value) =>log.info("Recorded temperature reading {} with {}", value, id)lastTemperatureReading = Some(value)sender() ! TemperatureRecorded(id)case ReadTemperature(id) =>sender() ! RespondTemperature(id, lastTemperatureReading)}

如您所见,Akka中的模式匹配严格只针对单个消息 。 这并不奇怪,因为参与者一次处理一条消息。 在规则引擎中,我们可以编写几条规则,在执行时对工作内存整个状态做出反应:这明显不同于纯粹的参与者模型设计,但同时在创建时提供了很大的灵活性。您可以编写应用程序的业务逻辑的方式。

数据源

值得在数据源上花一些时间。 数据源构造可以看作是对传统工作内存的分区抽象 。 将提供不同种类的数据源:功能齐全的数据存储区可能支持添加,删除和更新值,从而允许在工作内存上进行更传统的操作; 而受更严格限制的仅追加数据流将更易于与外部数据源和数据接收器(例如Camel连接器)集成。 这样的约束对于启用更高级的用例(例如并行,线程安全的执行
OpenShift集群的各个节点之间持久共享通道 (例如:Kafka),实现了完全分布式的规则引擎。

Kogito:ergo Cloud

并行和分布式用例很有趣 ,但是我们需要一步步走到那里 但是,这并不意味着第一步不会像以自己的方式那样令人兴奋。

对于Kogito,我们要强调云原生的无状态用例,其中
控制流程使用流程进行了外部 化,并借助
Quarkus我们可以将其编译为超快速的本机二进制文件。 因此,我们将在接下来的几周内完成并发布规则单元 自动化REST服务实施

在此用例中, 规则单元的基于Java的类型化声明为
自动映射到REST端点的签名。 POST到端点意味着实例化该单元,将数据插入数据源,触发规则,返回响应有效负载。 使用用户提供的查询来计算响应。 例如,考虑以下示例:

package org.kie.kogito.rules.alerting
unit MonitoringService
query Alerts(Alert alert) alert := /alerts # Warning // select all sub-type Warning
end

用户可以使用自动生成的/ monitoring-service端点发布事件。回复将是查询的结果。 在我们的情况下:

{"events": [ { "type": "WarningHighTemperature", "value": 40, "timestamp": "2019-07-12T18:25:45.000Z" }]
}

答复将是查询的结果。 在我们的情况下:

{"events": [ { "type": "Temperature", "value": 10, "timestamp": "2019-07-12T18:25:43.000Z" },{ "type": "Temperature", "value": 25, "timestamp": "2019-07-12T18:25:44.000Z" },{ "type": "Temperature", "value": 40, "timestamp": "2019-07-12T18:25:45.000Z" }]
}

多云,有规则

我们已经提出了我们在Kogito以及以后的下一代规则引擎的愿景。 无状态用例只是迈向迈向规则引擎真正创新之举的第一步。 在接下来的几个月中,我们将努力为并行(本地)和分布式(在Openshift上)分布式单元的调度和部署提供更好的支持,敬请期待。 同时,我们确实希望听到您关于我们正在采取的方向的信息。

翻译自: https://www.javacodegeeks.com/2019/08/kogito-ergo-rules-encompassing-execution-model.html

Kogito,ergo规则—第2部分:规则的全面执行模型相关推荐

  1. 后台审核管理 ergo_Kogito,ergo规则—第2部分:规则的全面执行模型

    后台审核管理 ergo 这是第二后 一系列更新的Kogito主动性和我们的努力,使Drools的云. 在本文中,我们将深入研究规则单元的详细信息,并向您展示为什么我们对它们感到兴奋. 规则的全包执行模 ...

  2. 规则引擎选型及应用 邴越 2017-04-27 16:31:17 浏览614 评论0 HTTPS 模块 配置 string exception void input 规则引擎 摘要: 规则引擎具体执

    规则引擎选型及应用 邴越 2017-04-27 16:31:17 浏览614 评论0 HTTPS 模块 配置 string exception void input 规则引擎 摘要: 规则引擎具体执行 ...

  3. php api 无符号整数基数为16的整数参数的字符串表示形式,[1.12]-参数规则:接口参数规则配置 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...

    "播下一种思想,收获一种行为:播下一种行为,收获一种习惯:播下一种习惯,收获一种性格:播下一种性格,收获一种命运." --<成君忆:水煮三国> 1.12.1 参数解析 ...

  4. 字符串匹配算法(二):BM(BoyerMoore)算法、坏字符规则,好后缀规则

    文章目录 BM算法 坏字符规则 好后缀规则 完整代码 BM算法 BM算法的全程叫做Boyer-Moore,是工程上最常用且最高效的字符串匹配算法,有实验统计,它的性能是著名的KMP 算法的 3 到 4 ...

  5. mysql mycat 路由规则_Mycat分库路由规则

    Mycat分库路由规则 发布时间:2020-06-15 16:54:10 来源:51CTO 阅读:11651 作者:lzf05303774 一.Mycat分库路由分为连续路由和离散路由. 1.连续路由 ...

  6. linix防火墙设置之顺序设置问题 -- 解决防火墙规则顺序和插入规则到指定序号的问题...

    转载于百度经验:https://jingyan.baidu.com/article/ae97a646ce58c2bbfd461d90.html 无论是硬件防火墙还是软件防火墙都会有一个规则序列的问题, ...

  7. 对makefile中:单冒号普通规则和::双冒号规则的理解 -转

    原文地址:对makefile中:单冒号普通规则和::双冒号规则的理解 作者:gliethttp luther: /gliethttp/a.c /gliethttp/b.c /gliethttp2/c. ...

  8. 规则引擎 Drools:规则引擎概述

    什么是规则引擎 规则引擎,全称为 业务规则管理系统,英文名为BRMS(即Business Rule Management System).规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用 ...

  9. python自动生成采集规则_快速制作规则及获取规则提取器API

    1. 引言 前面文章的测试案例都用到了集搜客Gooseeker提供的规则提取器,在网页抓取工作中,调试正则表达式或者XPath都是特别繁琐的,耗时耗力,工作枯燥,如果有一个工具可以快速生成规则,而且可 ...

最新文章

  1. php 500 内部服务器错误,php 500 - 内部服务器错误的解决方法
  2. C 语言编程 — 变量和常量
  3. 论文阅读:Multi-scale orderless pooling of deep convolutional activation features
  4. webstorm如何自动换行_怎样在word中自动生成目录
  5. Linux下安装Oracle遇到的错误
  6. Matlab C++混合编程 在VisualStudio下的编程 使用了Opencv库
  7. TypeScript—语法简介
  8. mongodb 输出数组字段_三分钟 mongodb 开发快速上手
  9. github创建一个新的tag
  10. 赠书 | SkyWalking 观测 Service Mesh 技术大公开
  11. mysql linux设置密码_Linux下第一次使用MySQL数据库,设置密码
  12. SignalR---DOTNET客户端
  13. SpringBoot系列(9):SpringBoot配置文件详解
  14. AutoCAD 版本历史 版本代号
  15. “牙医”教你用450行Go代码自制编程语言 | Gopher Daily (2021.01.15) ʕ◔ϖ◔ʔ
  16. 工业镜头的主要参数与选型
  17. 微型计算机增刊2016,科幻世界·2016年增刊
  18. 写给程序员看的面向对象摄影技巧
  19. 圆柱体的投影特点_机械制图常识:圆柱体
  20. C语言拆分一个三位数。以及交换两个数(常规法复习加指针法学习)

热门文章

  1. nssl1218-TRAVEL【SPFA】
  2. JavaFX官方教程(三)之JavaFX示例应用程序入门
  3. JAVA面试常考系列十
  4. ssm使用全注解实现增删改查案例——applicationContext-servlet.xml
  5. mysql中的isnull
  6. wireshark tcp抓包分析_网络分析系列之八_使用Wireshark抓包
  7. 【3】flink sink
  8. 转:Java并发编程与高并发解决方案(一)
  9. java流与文件——对象流和序列化
  10. 托管 非托管_如何在托管的Kubernetes上备份Neo4J