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

后台审核管理 ergo

这是第二后 一系列更新的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中的模式匹配严格只针对单个消息 。 这并不奇怪,因为参与者一次处理一条消息。 在规则引擎中,我们可以编写几个规则,在执行时对工作内存整个状态做出React:这明显不同于纯粹的参与者模型设计,但同时在创建时提供了很大的灵活性。您可以编写应用程序的业务逻辑的方式。

数据源

值得在数据源上花一些时间。 数据源构造可以看作是对传统工作内存的分区抽象 。 将提供不同类型的数据源:功能齐全的数据存储区可能支持添加,删除和更新值,从而允许在工作内存上进行更多传统操作; 而受限的仅追加数据流将更易于与外部数据源和数据接收器(例如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

后台审核管理 ergo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不相交集ADT(联机算法 + 脱机算法)

【0】README 0.1&#xff09;本文总结于 数据结构与算法分析&#xff0c; 旨在分享 不相交集ADT的相关概念&#xff1b; 0.2&#xff09; 不相交集ADT 的知识涉及到&#xff1a; 等价关系、动态等价关系、不相交集ADT相关操作及其数据结构 &#xff0c;还有我们最后分享的 不…

win7无法连接打印机拒绝访问_Win7系统”windows无法连接到打印机拒绝访问“怎么办?通过创建local port端口连接来搞定...

随着电脑的使用率越来越高&#xff0c;我们有时候可能会遇到Win7系统”windows无法连接到打印机拒绝访问“的问题&#xff0c;要怎么处理呢&#xff1f;详细解决方法如下&#xff1a;故障现象&#xff1a;按照XP的方式添加打印机&#xff0c;总是会出现“windows无法连接到打印…

spring boot测试_测试Spring Boot有条件的合理方式

spring boot测试如果您或多或少有经验的Spring Boot用户&#xff0c;那么很幸运&#xff0c;在某些时候您可能需要遇到必须有条件地注入特定bean或配置的情况 。 它的机制是很好理解的 &#xff0c;但有时这样的测试条件下&#xff08;以及它们的组合&#xff09;可能会导致混乱…

不相交集的求并算法(按集合大小求并+按高度求并)

【0】README 0.1&#xff09;本文总结于 数据结构与算法分析&#xff0c; 但源代码均为原创&#xff0c;旨在实现 不相交集ADT的两个操作&#xff1a;合并集合union查找集合find&#xff1b; 0.2&#xff09; 不相交集ADT 的 Introduction &#xff0c; 参见 http://blog.csd…

及时复盘的好处_该如何复盘 先来说说复盘的好处: 复盘的好处简直太多了!就像你学习一样有一个总结的过程,复盘的最直接好处就是增强你的“股感”!在股市... - 雪球...

来源&#xff1a;雪球App&#xff0c;作者&#xff1a; 孜孜金融&#xff0c;(https://xueqiu.com/3493013654/135651359)先来说说复盘的好处&#xff1a;复盘的好处简直太多了&#xff01;就像你学习一样有一个总结的过程&#xff0c;复盘的最直接好处就是增强你的“股感”&am…

posman mocks_使用Mocks进行需求驱动的软件开发

posman mocksjmock作者撰写的有关模拟框架的优秀论文 。 本文写于18年前的2004年&#xff0c;但其中有许多构建可维护软件系统的技巧。 在这篇文章中&#xff0c;我将重点介绍本文中的关键思想&#xff0c;但建议您阅读本文以获取有关模拟和编程实践的重要思想。 模拟对象是测…

不相交集合求并的路径压缩

【0】README 0.1&#xff09;本文总结于 数据结构与算法分析&#xff0c; 源代码均为原创&#xff0c; 旨在实现 对不相交集合的路径压缩操作&#xff1b; 0.2&#xff09;对求并后的集合进行路径压缩&#xff0c;目的是降低集合&#xff08;合并树&#xff09;的深度&#x…

python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...

首先介绍几个概念&#xff1a;1、#所谓的静态方法就是这个方法任何类都可以调用&#xff0c;程序一加载就存在的方法2、所谓的类方法就是这个类一加载就存在的方法&#xff0c;不用实例化这个类就已经存在的方法3、所谓的元类就是创建类的类元类&#xff1a; type我们知道对象是…

flutter调用api_如何在Flutter(REST API)中进行API调用

flutter调用api在本文中&#xff0c;我们将看一下如何快速进行API调用并使用简单的REST API。 在这里查看我在Flutter上的其他一些帖子&#xff1a; Flutter vs React Native 了解Flutter中的BLoC架构 &#xff08;强烈建议&#xff09; 在Flutter中构建ListView&#xff0…

java重载与重写的区别+重写父类equals方法的完美实现

【0】README 0.1&#xff09; 本文章节【1】和【2】的内容转自 http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html &#xff1b; 旨在区分重载与重写以及他们的相关概念&#xff1b; 0.2&#xff09; 本文章节【3】的内容转自 http://blog.csdn.net/pacoson…

checkpoint_通过Main的Checkpoint Restore加快Java启动速度

checkpointJava虚拟机为已编译为字节码 &#xff08;但不一定是用Java编写&#xff09;的应用程序提供了托管运行时环境。 与为特定平台静态编译的代码相比&#xff0c;这为应用程序开发人员提供了许多好处&#xff0c;并且通常可以提高性能。 JVM通过垃圾回收器 &#xff08;G…

泛型数组列表ArrayList

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理清 java 中的 数组列表 ArrayList&#xff1b; 【2】数组列表 ArrayList 2.1&#xff09;ArrayList&#xff1a; ArrayList 具有自动调节数组容量的功能&#xff0c; 而不需要为此…

大数据聚类分析用于预测_多模态数据中的非负矩阵分解用于分割和标签预测

引用Akata Z, Thurau C, Bauckhage C. Non-negative matrix factorization in multimodality data for segmentation and label prediction[C]. 2011.摘要随着 Internet 上带注释的多媒体数据的可用性不断提高&#xff0c;要求有一种技术可以实现不同类型数据的原则性联合处理。…

程序员 rs编码_为什么声明性编码使您成为更好的程序员

程序员 rs编码在许多情况下&#xff0c;具有功能组成的声明式解决方案提供了优于传统命令式代码的出色代码指标。 阅读本文并了解如何使用具有功能组成的声明性代码成为一名更好的程序员。 在本文中&#xff0c;我们将仔细研究三个问题示例&#xff0c;并研究用于解决这些问题…

对象包装器与自动(拆箱)装箱+参数数量可变的方法+枚举类

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 自动拆箱&#xff08;装箱&#xff09;、printf的参数数量可变 以及 枚举类的详细说明&#xff1b; 0.2&#xff09; 源代码&#xff1a; https://github.com/pacosonTang/core…

go 监测tcp 连接断开_TCP三次握手和四次挥手以及11种状态

三次握手置位概念&#xff1a;根据TCP的包头字段&#xff0c;存在3个重要的标识ACK、SYN、FINACK&#xff1a;表示验证字段 SYN&#xff1a;位数置1&#xff0c;表示建立TCP连接 FIN&#xff1a;位数置1&#xff0c;表示断开TCP连接三次握手过程说明&#xff1a;1.由客户端发送…

java序列化深克隆_如何在内存序列化中使用Java深克隆对象

java序列化深克隆在我以前的文章中&#xff0c;我解释了深度克隆和浅层克隆之间的区别 &#xff0c; 以及复制构造函数和防御性复制方法比默认的Java克隆如何更好。 使用复制构造函数和防御性复制方法进行的Java对象克隆当然具有某些优势&#xff0c;但是我们必须显式编写一些…

java反射机制+继承设计技巧

【0】README 0.1&#xff09; 本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理解 java反射机制 &#xff1b;最后还顺带提出了 继承设计的技巧&#xff1b; 【1】反射相关 1&#xff09;反射定义&#xff1a;能够分析类能力的程序称为反射&#xff1b; 2&…

60秒计时器的仿真电路_基于伏秒平衡的同步整流方案探讨

为了提高电源的效率和功率密度&#xff0c;尤其是低输出电压的应用场合&#xff0c;同步整流是不可或缺的。图1-1 反激输出二极管损耗比如上图的反激电源如果输出二极管 Vf0.7V&#xff0c;输出电压 Vout3V 则效率不会高于3/(30.7)81%。为了提升效率一般会选用低导通压降的肖特…

利用反射机制创建新类的两种方式及比较

【0】README 0.1&#xff09; 本文描述源代码均 转自 http://blog.csdn.net/fenglibing/article/details/4531033 &#xff0c; 旨在深入理解 如何利用反射机制创建类实例&#xff1b; 0.2&#xff09; 转载的源代码&#xff0c;参见 https://github.com/pacosonTang/core-ja…