网站建设logo显示怎么设置,中国字体设计,交通工具网页界面设计,wordpress侧栏显示指定分类后台审核管理 ergo欢迎阅读有关Kogito倡议的博客系列的另一集#xff0c;以及我们将Drools带入云的努力。 这些文章的目的是收集用户对我们提供给Kogito的功能的早期反馈。 在本文中#xff0c;我们介绍了两种实现完整智能服务的新方法 #xff1a; 独立的规则服务 集成智… 后台审核管理 ergo 欢迎阅读有关Kogito倡议的博客系列的另一集以及我们将Drools带入云的努力。 这些文章的目的是收集用户对我们提供给Kogito的功能的早期反馈。 在本文中我们介绍了两种实现完整智能服务的新方法 独立的规则服务 集成智能工作流程和规则任务 Kogito的执行单位 您可能已经知道在Kogito中我们正在使全新的Unit概念成为中心。 “执行单元”是我们用来表示可执行知识的术语。 一个单元可以是一个过程一组规则一个决策等。在一组规则的情况下我们称其为规则单元 。 如果您选择使用单位则在Kogito中我们将照顾自动生成REST端点所需的所有样板。 规则单元主要由 1数据定义 2一组实现单元行为的规则和查询规则引擎的规则 3可选地可以出于多种目的附加事件监听器。 在本文中我们将重点介绍数据定义规则和查询。 通过声明一个可能包含数据源的Java类来给出数据定义 。 每个数据源代表规则将匹配或插入到其中的工作内存分区。 例如假设您要声明一个警报服务该服务接收事件并根据某些条件产生警报。 我们声明 Event和Alert对象如下 package com.acme; public class Event { String type; int value; // getters and setters } public class Alert { String severity; String message; // getters and setters } AlertingService单元类型声明是实现接口RuleUnitData 。 package com.acme; public class AlertingService implements RuleUnitData { private final DataStreamEvent eventData DataSource.createStream(); private final DataStreamAlert alertData DataSource.createStream(); // getters and setters } 规则通常在DRL文件中定义除了现在必须在文件顶部指示它们的单位 。 例如您可以按以下方式声明AlertingService的数据定义 package com.acme; unit AlertingService; rule IncomingEvent when // matches when a temperature higher than 30 °C is registered (OOPath syntax) $e : /eventData [ type temperature , value 30 ] then System.out.println( incoming event: $e.getMessage()); alertData.append( new Alert( warning , Temperature is too high ) ); end 如您所见规则可能与给定的数据源匹配或插入到给定的数据源。 查询是在DRL文件如规则中定义的也属于一个单元。 如果声明至少一个查询则将免费获得REST端点自动生成 。 例如 query Warnings alerts: /alertData [ severity warning ] end 将生成REST终结点/warnings 您可以通过以下方式对其进行POST-ing调用 $ curl -X POST \ -H Accept: application/json \ -H Content-Type: application/json \ -d { eventData: [ { type: temperature, value : 40 } ] } \ http: //localhost:8080/warnings 这将生成响应 [ { severity : warning , message : Temperature is too high } ] 程序员非常熟悉基于Java的数据定义但是从用户的早期反馈来看 我们决定提供两种替代方法来声明规则单元 。 我们正在发布此博客文章以收集更多的用户反馈 类型声明 类型声明是DRL功能用于以与Java无关的方式声明与Java兼容的类型。 在7系列中用户可以使用以下语法声明类型 package com.acme; declare Event type: String value: int end declare Alert severity: String message: String end 这使DRL完全独立可以使用DRL定义实体和规则。 但是它们没有什么限制。 例如它们不支持实现接口也不支持泛型类型字段。 换句话说以下声明在7系列中在语法上是无效的 package com.acme; declare AlertingService extends RuleUnitData eventData: DataStreamEvent alertData: DataStreamAlert end 在版本0.8.0中我们解除了这些限制我们允许接口的继承受限现在仅允许一个继承而字段的通用类型声明。 有了这些新功能以下代码将成为有效的DRL。 长话短说 您现在可以声明完整的微服务 来自单个DRL 。 使用原型引导您的Kogito服务 mvn archetype:generate \ -DarchetypeGroupIdorg.kie.kogito \ -DarchetypeArtifactIdkogito-quarkus-archetype \ -DarchetypeVersion 0.8 . 0 \ -DgroupIdcom.acme \ -DartifactIdsample-kogito 目前没有Quarkus版本捆绑Kogito 0.8.0。 否则您将可以使用mvn io.quarkus:quarkus-maven-plugin:create代替。 现在清除src/main的内容然后将此DRL放到src/main/resources/com/acme文件夹中 package com.acme; unit AlertingService; import org.kie.kogito.rules.DataStream; import org.kie.kogito.rules.RuleUnitData; declare Event type: String value: int end declare Alert severity: String message: String end declare AlertingService extends RuleUnitData eventData: DataStreamEvent alertData: DataStreamAlert end rule IncomingEvent when // matches when a temperature higher than 30 °C is registered (OOPath syntax) $e : /eventData [ type temperature , value 30 ] then System.out.println( incoming event: $e.getMessage()); alertData.append( new Alert( warning , Temperature is too high: $e ) ); end query Warnings alerts: /alertData [ severity warning ] end 现在以以下方式在开发人员模式下启动Quarkus服务 $ mvn compile quarkus:dev 到此为止您现在可以curl您的服务了 $ curl -X POST \ -H Accept: application/json \ -H Content-Type: application/json \ -d { eventData: [ { type: temperature, value : 40 } ] } \ http: //localhost:8080/warnings 工作流程整合 公开基于规则的服务的另一种方法是通过工作流 。 工作流 有时称为“业务流程”描述了图中的一系列步骤并且通常会声明变量 在执行过程中操作的值的数据持有者。 一个这样的变量的数据类型可以是任何东西 您可以使用Java类但是在此示例中我们将再次使用声明的数据类型。 package com.acme; declare Event type: String value: int end declare Alert severity: String message: String end 让我们将此工作流称为com.acme.AlertingWorkflow 并声明变量eventData和alertData 包含规则任务的工作流可能会完全跳过规则单元的数据声明 在这种情况下规则单元是直接从流程的结构中推断的每个变量都将插入同名的数据源中 。 单元的名称由进程使用语法unit:com.acme.AlertingService 。 您仍然可以自由声明单元com.acme.AlertingService 在这种情况下该过程将获取您手工编码的声明。 注意您可能已经注意到我们正在使用“规则流组”字段。 将来我们将在UI中实现更明确的支持。 使用原型引导您的Kogito服务 mvn archetype:generate \ -DarchetypeGroupIdorg.kie.kogito \ -DarchetypeArtifactIdkogito-quarkus-archetype \ -DarchetypeVersion 0.8 . 0 \ -DgroupIdcom.acme \ -DartifactIdsample-kogito 警告 。 该功能的支持是试验性的因此它可能无法与Quarkus热代码重新加载无缝配合 我们还需要执行以下额外步骤来启用它但将来会有所改变。 使用以下插件声明更新pom.xml build plugins plugin groupIdorg.kie.kogito/groupId artifactIdkogito-maven-plugin/artifactId version 0.8 . 0 /version executions execution goals goalgenerateDeclaredTypes/goal /goals /execution /executions /plugin ... /plugins /build 现在您可以清除src/main的内容然后将进程和以下DRL放到src/main/resources/com/acme文件夹中。 package com.acme; unit AlertingService; import org.kie.kogito.rules.DataStream; import org.kie.kogito.rules.RuleUnitData; declare Event type: String value: int end declare Alert severity: String message: String end rule IncomingEvent when // matches when a temperature higher than 30 °C is registered (OOPath syntax) $e : /eventData [ type temperature , value 30 ] then System.out.println( incoming event: $e.getMessage()); alertData.set( new Alert( warning , Temperature is too high: $e ) ); end 您可能已经注意到不需要显式声明查询该过程将显示变量的内容作为响应 它将生成端点/AlertingWorkflow 并接受以下形式的POST请求 $ curl -X POST \ -H Accept: application/json \ -H Content-Type: application/json \ -d { eventData: { type: temperature, value : 40 } } \ http: //localhost:8080/AlertingWorkflow 答复将是 { id : ..., eventData : { type : temperature , value : 100 }, alertData : { severity : warning , message : Temperature is too high: Event( typetemperature, value100 ) } } 但是如果您确实声明了查询则也可以使用单独的端点。 例如如果您声明查询“ Warnings您仍然可以POST到http://localhost:8080/warnings并分别调用规则服务如下所示 $ curl -X POST \ -H Accept: application/json \ -H Content-Type: application/json \ -d { eventData: { type: temperature, value : 40 } } \ http: //localhost:8080/warnings 请注意该请求不再包含事件列表。 这是因为过程变量映射到单个值而不是DataStreams。 结论 我们偷看了我们正在做的工作以改进Kogito中的规则和流程的入门经验。 通过这些更改我们希望提供一种更加简化的方法来定义基于知识的服务。 通过选择编写Java开发人员将始终能够更加明确地了解他们想要处理的数据。 但如果他们愿意他们可以采用完全以DSL为中心的开发工作流程。 对于懒惰可以在https://github.com/evacchi/kogito-rules-example/tree/master/code获得示例。 翻译自: https://www.javacodegeeks.com/2020/03/kogito-ergo-rules-from-knowledge-to-service-effortless.html后台审核管理 ergo