在 Red Hat Process Automation Manager 中使用红帽构建的 Kogito
摘要
前言
作为商业决策和流程的开发人员,您可以使用红帽构建的 Kogito 构建符合您业务域和工具的云原生应用程序。
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 信息。
部分 I. 红帽构建的 Kogito 微服务入门
作为商业决策的开发人员,您可以使用红帽构建的 Kogito 商业自动化来使用决策模型和表示法(DMN)模型、Jroal 规则语言(DRL)规则、预测模型标记语言(PMML)或所有三种方法的组合开发决策服务。
先决条件
- 已安装了 JDK 11 或更高版本。
- 已安装 Apache Maven 3.6.2 或更高版本。
第 1 章 Red Hat Process Automation Manager 中的 Red Hat build of Kogito 微服务
红帽构建的 Kogito 是一个云原生业务自动化技术,用于构建云就绪的商业应用程序。名称 Kogito 派生自拉包的"Cogito",如 "Cogito, ergo sum" ("I consider", I am", is pronounced [öko\":\".döi.to]
(KO-jee-to)。字母 K 代表 Kubernetes,它是 Red Hat OpenShift Container Platform 的基础,作为 Red Hat Process Automation Manager 的目标云平台,并遵循红帽构建 Kogito 提供的每个知识(KIE)开源自动化项目。
Red Hat Process Automation Manager 中的 Red Hat build of Kogito 针对混合云环境进行了优化,并满足您的域和工具需求。红帽构建的 Kogito 微服务的核心目标是帮助您将一组决策放大到您自己的特定于域的云原生服务。
在 Red Hat Process Automation Manager 7.11 版本中,红帽构建的 Kogito 支持仅限于决策服务,包括决策模型和表示法(DMN)、Droal 规则语言(DRL)和预测模型标记语言(PMML)。以后的发行版本中,这个支持会被改进并扩展到 Business Process Modeling Notation (DSLN)。
当您使用红帽构建的 Kogito 时,您将构建云原生应用程序作为一组独立域特定微服务,以实现一些商业值。您用来描述目标行为的决策作为您创建的微服务的一部分执行。生成的微服务具有高度分布式且可扩展的,无需集中编排服务,而您的微服务使用的运行时会根据需要的内容进行了优化。
作为自定义规则开发人员,您可以在 Red Hat Process Automation Manager 中使用红帽构建的 Kogito 微服务来构建符合您的业务域和工具的云原生应用程序。
1.1. 云优先优先级
红帽构建的 Kogito 微服务旨在在云基础架构上运行和扩展。您可以在 Red Hat Process Automation Manager 中使用红帽构建的 Kogito 微服务,以及最新的基于云的技术(如 Red Hat OpenShift Container Platform),以增加容器应用程序平台上的开始时间和即时扩展,如 Red Hat OpenShift Container Platform。
例如,红帽构建的 Kogito 微服务与以下技术兼容:
- Red Hat OpenShift Container Platform 基于 Kubernetes,这是构建和管理容器化应用程序的目标平台。
- Red Hat build of Quarkus 是 Kubernetes 的原生 Java 堆栈,可用于使用红帽构建的 Kogito 微服务构建应用程序。
- Spring Boot 是一个应用程序框架,可用于使用 Red Hat Process Automation Manager 配置 Spring Framework。
1.2. 红帽在 Red Hat build of Quarkus 和 Spring Boot 上构建的 Kogito 微服务
红帽构建的 Kogito 微服务支持的主要 Java 框架是红帽构建的 Quarkus 和 Spring Boot。
Red Hat build of Quarkus 是一个 Kubernetes 原生 Java 框架,它带有容器优先构建 Java 应用程序的方法,特别是 OpenJDK HotSpot 等 Java 虚拟机(JVM)。Red Hat build of Quarkus 通过减少 Java 应用程序和容器镜像占用的大小来优化 Java,从而消除了之前生成中的一些 Java 编程工作负载,并减少运行这些镜像所需的内存量。
对于红帽构建的 Kogito 微服务,红帽构建的 Quarkus 是最佳 Kubernetes 兼容性和增强的开发人员功能的首选框架,如开发模式中实时重新加载用于高级调试。
Spring Boot 是一个基于 Java 的框架,用于构建独立生产就绪的 Spring 应用程序。Spring Boot 可让您使用最少的配置和整个 Spring 配置设置开发 Spring 应用程序。
对于 Red Hat build of Kogito 微服务,Spring Boot 支持在现有 Spring Framework 环境中使用 Red Hat Process Automation Manager 的开发人员。
第 2 章 用于红帽构建的 Kogito 微服务的 DMN 模型器
Red Hat Process Automation Manager 提供扩展或应用程序,您可以使用图形模型为红帽构建的 Kogito 微服务设计决策模型设计决策模型。
以下 DMN 模型器在 Business Modeler Hub 桌面应用程序中提供:
vscode 扩展 :允许您在 Visual Studio Code (VSCode)中查看和设计 DMN 模型。VSCode 扩展需要 VSCode 1.46.0 或更高版本。
要直接在 VSCode 中安装 VSCode 扩展,请在 VSCode 中选择 Extensions 菜单选项,再搜索并安装 Red Hat Business Automation Bundle 扩展。
-
Business Modeler standalone editors:能够查看并设计嵌入在 web 应用程序中的 DMN 模型。要下载所需的文件,您可以使用 Kogito 工具存储库中的 NPM 工件,或为 DMN 独立编辑器库直接下载 JavaScript 文件,网址为
https://kiegroup.github.io/kogito-online/standalone/dmn/index.js
。
2.1. 安装 Red Hat Process Automation Manager VSCode 扩展捆绑包
Red Hat Process Automation Manager 提供了一个 Red Hat Business Automation Bundle VSCode 扩展,可让您直接在 VSCode 中设计决策模型和表示法(DMN)决策模型、业务流程模型和表示法(DSLN) 2.0 业务,以及测试场景。与代码相比,这是开发新商业应用程序的首选集成开发环境(IDE)。只有在需要时,Red Hat Process Automation Manager 还会为 DMN 或 Thorntail 支持提供单独的 DMN Editor 和 TripleO Editor VSCode 扩展。
VSCode 中的编辑器与 Business Central 中的编辑器部分兼容,VSCode 不支持几个 Business Central 功能。
先决条件
- 已安装 VSCode 的最新稳定版本。
流程
在 VSCode IDE 中,选择 Extensions 菜单选项,并搜索 Red Hat Business Automation Bundle for DMN、Tist 和 test 场景文件支持。
对于 DMN 或 the 文件支持,您也可以搜索单独的 DMN Editor 或 Tailoring Editor 扩展。
- 当 Red Hat Business Automation Bundle 扩展出现在 VSCode 中时,选择它并单击 Install。
- 对于最佳 VSCode 编辑器行为,请在完成扩展安装后,重新加载或关闭和重新启动 VSCode 实例。
安装 VSCode 扩展捆绑包后,您在 VSCode 中打开或创建的 .dmn
、.bpmn
或 .bpmn2
文件将自动显示为图形模型。此外,您打开或创建的 .scesim
文件将自动显示为表格测试场景模型,用于测试您的决策功能。
如果 DMN、Trant 或 test 场景模型仅打开 DMN、Tist 或 test 场景文件的 XML 源,并显示错误消息,检查报告的错误和模型文件,以确保正确定义了所有元素。
对于新的 DMN 或 IaaS 模型,您还可以在 Web 浏览器中输入 dmn.new
或 bpmn.new
,以便在在线模型中设计 DMN 或 192.168.1.0/24 模型。完成创建模型后,您可以在在线模型器页面中单击 Download,将 DMN 或 the 文件导入到 VSCode 中的 Red Hat Process Automation Manager 项目中。
2.2. 配置 Red Hat Process Automation Manager 独立编辑器
Red Hat Process Automation Manager 提供独立编辑器,这些编辑器在自包含的库中分发,为每个编辑器提供一个 all-in-one JavaScript 文件。JavaScript 文件使用全面的 API 来设置和控制编辑器。
您可以通过三种方式安装独立编辑器:
- 手动下载每个 JavaScript 文件
- 使用 NPM 软件包
�程
使用以下方法之一安装独立编辑器:
手动下载每个 JavaScript 文件 :对于此方法,请按照以下步骤执行:
- 下载 JavaScript 文件。
- 将下载的 Javascript 文件添加到托管应用程序中。
将以下 <
;script&
gt; 标签添加到 HTML 页面中:DMN 编辑器的 HTML 页面的脚本标签
<script src="https://<YOUR_PAGE>/dmn/index.js"></script>
您的 HTML 页面的脚本标签
<script src="https://<YOUR_PAGE>/bpmn/index.js"></script>
使用 NPM 软件包 :对于这个方法,请按照以下步骤执行:
在您的
package.json
文件中添加 NPM 软件包:添加 NPM 软件包
npm install @redhat/kogito-tooling-kie-editors-standalone
将每个编辑器库导入到您的 TypeScript 文件中:
导入每个编辑器
import * as DmnEditor from "@redhat/kogito-tooling-kie-editors-standalone/dist/dmn" import * as BpmnEditor from "@redhat/kogito-tooling-kie-editors-standalone/dist/bpmn"
安装独立编辑器后,使用提供的编辑器 API 打开所需的编辑器,如下例所示来打开 DMN 编辑器。每个编辑器的 API 相同。
打开 DMN 独立编辑器
const editor = DmnEditor.open({ container: document.getElementById("dmn-editor-container"), initialContent: Promise.resolve(""), readOnly: false, origin: "", resources: new Map([ [ "MyIncludedModel.dmn", { contentType: "text", content: Promise.resolve("") } ] ]) });
在编辑器 API 中使用以下参数:
表 2.1. 参数示例 å�‚æ•° æ��è¿° container
附加编辑器的 HTML 元素。
initialContent
承诺 DMN 模型内容。这个参数可以为空,如下例所示:
-
Promise.resolve("")
-
Promise.resolve("<DIAGRAM_CONTENT_DIRECTLY_HERE>")
-
fetch("MyDmnModel.dmn").then(content ⇒ content.text())
ReadOnly
(可选)允许您在编辑器中允许更改。设置为
false
(默认)以允许编辑器中的只读模式的内容编辑和true
。原始
(可选)存储库的来源。默认值为
window.location.origin
。资源
(可选)编辑器的资源映射。例如,此参数用于为 DMN 编辑器提供包含的型号,或为 the 编辑器提供工作项目定义。映射中的每个条目都包含一个资源名称,以及一个由
content-type
(text
或binary
) 和content
(与initialContent
参数类似) 组成的对象。返回的对象包含操作编辑器所需的方法。
表 2.2. 返回的对象方法 方法 æ��è¿° getContent(): Promise<string>
返回包含编辑器内容的承诺。
setContent(content: string): void
设置编辑器的内容。
getPreview(): Promise<string>
返回包含当前图的 SVG 字符串的承诺。
subscribeToContentChanges (callback: (isDirty: boolean) void void: (isDirty: boolean) void void
设置在编辑器中内容更改时调用的回调,并返回相同的回调来取消订阅。
unsubscribeToContentChanges (callback: (isDirty: boolean) rhcs void): void
当内容在编辑器中更改时,取消订阅传递的回调。
markAsSaved(): void
重置编辑器状态,表示保存编辑器中的内容。另外,它还激活与内容更改相关的订阅回调。
undo(): void
撤销编辑器中的最后更改。另外,它还激活与内容更改相关的订阅回调。
redo(): void
在编辑器中更改最后的未撤消更改。另外,它还激活与内容更改相关的订阅回调。
close(): void
关闭编辑器。
getElementPosition (selector: string): Promise<Rect>
提供当元素位于 canvas 或视频组件内时扩展标准查询选择器的替代选择。
选择器
参数必须遵循 <PROVIDER>:::<SELECT
> 格式,如Canvas:::MySquare
或Video:::PresenterHand
。此方法返回一个代表元素位置的Rect
。envelopeApi: MessageBusClientApi<KogitoEditorEnvelopeApi>
这是一个高级编辑器 API。有关高级编辑器 API 的更多信息,请参阅 MessageBusClientApi 和 KogitoEditorEnvelopeApi。
-
第 3 章 为红帽构建的 Kogito 微服务创建一个 Maven 项目
在开始开发红帽构建的 Kogito 微服务之前,您需要创建一个 Maven 项目,您可以在其中构建资产以及应用程序的任何其他相关资源。
流程
- 在命令终端中,导航到要存储新项目的本地文件夹。
输入以下命令在定义的文件夹中生成项目:
在 Red Hat build of Quarkus 上
$ mvn archetype:generate \ -DarchetypeGroupId=org.kie.kogito \ -DarchetypeArtifactId=kogito-quarkus-dm-archetype \ -DgroupId=org.acme -DartifactId=sample-kogito \ -DarchetypeVersion=1.5.0.redhat-00002 \ -Dversion=1.0-SNAPSHOT
在 Spring Boot 中
$ mvn archetype:generate \ -DarchetypeGroupId=org.kie.kogito \ -DarchetypeArtifactId=kogito-springboot-dm-archetype \ -DgroupId=org.acme -DartifactId=sample-kogito \ -DarchetypeVersion=1.5.0.redhat-00002 \ -Dversion=1.0-SNAPSHOT
此命令生成一个
sample-kogito
Maven 项目,并导入所有必需的依赖项和配置的扩展,以准备应用程序以进行自动化。如果要为项目启用 PMML 执行,请将以下依赖项添加到包含您红帽构建的 Kogito 微服务的 Maven 项目中的
pom.xml
文件中:启用 PMML 执行的依赖项
<dependency> <groupId>org.kie.kogito</groupId> <artifactId>kogito-pmml</artifactId> </dependency> <dependency> <groupId>org.jpmml</groupId> <artifactId>pmml-model</artifactId> </dependency>
在 Red Hat build of Quarkus 上,如果您计划在 OpenShift 上运行应用程序,还必须为 存活度和就绪度探测 导入
smallrye-health
扩展,如下例所示:在 OpenShift 上,红帽构建的 Quarkus 应用程序的小型健康状态扩展
$ mvn quarkus:add-extension -Dextensions="smallrye-health"
此命令在 Red Hat Process Automation Manager 项目的
pom.xml
文件中生成以下依赖项:对于 Red Hat 在 OpenShift 上构建 Quarkus 应用程序的小型健康状况依赖项
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-health</artifactId> </dependency>
- 在 VSCode IDE 中打开或导入项目,以查看其内容。
第 4 章 带有红帽构建 Kogito 微服务的示例应用程序
红帽构建的 Kogito 微服务在 rhpam-7.11.0-decision-services-quickstarts.zip
文件中包括示例应用程序。这些示例应用程序包含红帽构建的 Quarkus 或 Spring Boot 的各种服务,以帮助您开发自己的应用程序。服务使用一个或多个决策模型和表示法(DMN)决策模型、Jrools 规则语言(DRL)规则单元、预预测模型标记语言(PMML)模型或 Java 类来定义服务逻辑。
有关每个示例应用程序和使用它们的说明,请参阅相关应用程序文件夹中的 README
文件。
在本地环境中运行示例时,请确保环境与相关应用程序文件夹的 README
文件中列出的要求匹配。另外,这可能要求使必要的网络端口可用,如为 Red Hat build of Quarkus、Spring Boot 和 docker-compose 配置。
以下列表描述了红帽构建的 Kogito 微服务提供的一些示例:
- 决策服务
-
DMN
-quarkus-example
和dmn-springboot-example
:一个决定服务(红帽构建的 Quarkus 或 Spring Boot),它使用 DMN 根据流量违反情况确定驱动程序损失和挂起。 -
rules-quarkus-
the :红帽构建的 Quarkus 上的 Hello World 决策服务,带有单个 DRL 规则单元。 -
ruleunit-quarkus-example
和ruleunit-springboot-example
:决定服务(红帽构建的 Quarkus 或 Spring Boot),它使用带有规则单元的 DRL 来验证 loan 应用程序,并公开 REST 操作来查看应用程序状态。 -
dmn-pmml-quarkus-example
和dmn-pmml-springboot-example
: 一个决定服务(在 Red Hat build of Quarkus 或 Spring Boot 中),它使用 DMN 和 PMML 来确定根据流量违反情况的驱动程序损失和挂起。 -
dmn-drools-quarkus-metrics
和dmn-drools-springboot-metrics
: 一个决定服务(在 Red Hat build of Quarkus 或 Spring Boot 中)启用和使用 Kogito 的运行时指标监控功能。 -
pmML-quarkus-example
和pmml-springboot-example
: 一个决定服务(在 Red Hat build of Quarkus 或 Spring Boot 中)使用 PMML。
-
DMN
有关在 Red Hat Process Automation Manager 中使用 DMN、DRL 和 PMML 模型的更多信息,请参阅使用 DMN 模型设计 决策服务,使用 DRL 规则设计决策服务,以及使用 PMML 模型设计决策服务。
第 5 章 使用 DMN 为红帽构建的 Kogito 微服务设计应用程序逻辑
创建项目后,您可以在项目的 src/main/resources
文件夹中创建或导入决策模型和 Notation (DMN)决策模型和 dols 规则语言(DRL)。您还可以在作为 Java 服务的项目的 src/main/java
文件夹中包含 Java 类,或者提供您从决策调用的实现。
此流程的示例是生成 REST 端点 /persons
的基本红帽构建的 Kogito 微服务。此端点根据示例 PersonDecisions.dmn
DMN 模型自动生成,以根据正在处理的数据做出决策。
决策包含 Red Hat Process Automation Manager 服务的决策逻辑。您可以使用不同的方式定义新规则和决策,如使用 DMN 模型或 DRL 规则。此流程的示例使用 DMN 模型。
先决条件
- 您已创建了一个项目。有关创建 Maven 项目的更多信息,请参阅 第 3 章 为红帽构建的 Kogito 微服务创建一个 Maven 项目。
流程
在您为 Red Hat Process Automation Manager 服务生成的 Maven 项目中,导航到
src/main/java/org/acme
文件夹并添加以下Person.java
文件:人员 Java 对象示例
package org.acme; import java.io.Serializable; public class Person { private String name; private int age; private boolean adult; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isAdult() { return adult; } public void setAdult(boolean adult) { this.adult = adult; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", adult=" + adult + "]"; } }
这个示例 Java 对象集并检索个人的名称、年龄和 adult 状态。
进入
src/main/resources
文件夹,并添加以下PersonDecisions.dmn
DMN 决策模型:图 5.1.
PersonDecisions
DMN 决策要求图(DRD)示例图 5.2.
isAdult
决策的 DMN 框表达式示例图 5.3. DMN 数据类型示例
这个示例 DMN 模型包含一个基本的 DMN 输入节点,以及一个由带有自定义结构化数据类型的 DMN 决策表定义的决定节点。
在 VSCode 中,您可以添加 Red Hat Business Automation Bundle VSCode 扩展,以使用 DMN 模型器设计决策要求图(DRD)、框表达式和数据类型。
要快速创建这个示例 DMN 模型,您可以复制以下
PersonDecisions.dmn
文件内容:DMN 文件示例
<dmn:definitions xmlns:dmn="http://www.omg.org/spec/DMN/20180521/MODEL/" xmlns="https://kiegroup.org/dmn/_52CEF9FD-9943-4A89-96D5-6F66810CA4C1" xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/" xmlns:kie="http://www.drools.org/kie/dmn/1.2" xmlns:dmndi="http://www.omg.org/spec/DMN/20180521/DMNDI/" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" xmlns:feel="http://www.omg.org/spec/DMN/20180521/FEEL/" id="_84B432F5-87E7-43B1-9101-1BAFE3D18FC5" name="PersonDecisions" typeLanguage="http://www.omg.org/spec/DMN/20180521/FEEL/" namespace="https://kiegroup.org/dmn/_52CEF9FD-9943-4A89-96D5-6F66810CA4C1"> <dmn:extensionElements/> <dmn:itemDefinition id="_DEF2C3A7-F3A9-4ABA-8D0A-C823E4EB43AB" name="tPerson" isCollection="false"> <dmn:itemComponent id="_DB46DB27-0752-433F-ABE3-FC9E3BDECC97" name="Age" isCollection="false"> <dmn:typeRef>number</dmn:typeRef> </dmn:itemComponent> <dmn:itemComponent id="_8C6D865F-E9C8-43B0-AB4D-3F2075A4ECA6" name="Name" isCollection="false"> <dmn:typeRef>string</dmn:typeRef> </dmn:itemComponent> <dmn:itemComponent id="_9033704B-4E1C-42D3-AC5E-0D94107303A1" name="Adult" isCollection="false"> <dmn:typeRef>boolean</dmn:typeRef> </dmn:itemComponent> </dmn:itemDefinition> <dmn:inputData id="_F9685B74-0C69-4982-B3B6-B04A14D79EDB" name="Person"> <dmn:extensionElements/> <dmn:variable id="_0E345A3C-BB1F-4FB2-B00F-C5691FD1D36C" name="Person" typeRef="tPerson"/> </dmn:inputData> <dmn:decision id="_0D2BD7A9-ACA1-49BE-97AD-19699E0C9852" name="isAdult"> <dmn:extensionElements/> <dmn:variable id="_54CD509F-452F-40E5-941C-AFB2667D4D45" name="isAdult" typeRef="boolean"/> <dmn:informationRequirement id="_2F819B03-36B7-4DEB-AED6-2B46AE3ADB75"> <dmn:requiredInput href="#_F9685B74-0C69-4982-B3B6-B04A14D79EDB"/> </dmn:informationRequirement> <dmn:decisionTable id="_58370567-05DE-4EC0-AC2D-A23803C1EAAE" hitPolicy="UNIQUE" preferredOrientation="Rule-as-Row"> <dmn:input id="_ADEF36CD-286A-454A-ABD8-9CF96014021B"> <dmn:inputExpression id="_4930C2E5-7401-46DD-8329-EAC523BFA492" typeRef="number"> <dmn:text>Person.Age</dmn:text> </dmn:inputExpression> </dmn:input> <dmn:output id="_9867E9A3-CBF6-4D66-9804-D2206F6B4F86" typeRef="boolean"/> <dmn:rule id="_59D6BFF0-35B4-4B7E-8D7B-E31CB0DB8242"> <dmn:inputEntry id="_7DC55D63-234F-497B-A12A-93DA358C0136"> <dmn:text>> 18</dmn:text> </dmn:inputEntry> <dmn:outputEntry id="_B3BB5B97-05B9-464A-AB39-58A33A9C7C00"> <dmn:text>true</dmn:text> </dmn:outputEntry> </dmn:rule> <dmn:rule id="_8FCD63FE-8AD8-4F56-AD12-923E87AFD1B1"> <dmn:inputEntry id="_B4EF7F13-E486-46CB-B14E-1D21647258D9"> <dmn:text><= 18</dmn:text> </dmn:inputEntry> <dmn:outputEntry id="_F3A9EC8E-A96B-42A0-BF87-9FB1F2FDB15A"> <dmn:text>false</dmn:text> </dmn:outputEntry> </dmn:rule> </dmn:decisionTable> </dmn:decision> <dmndi:DMNDI> <dmndi:DMNDiagram> <di:extension> <kie:ComponentsWidthsExtension> <kie:ComponentWidths dmnElementRef="_58370567-05DE-4EC0-AC2D-A23803C1EAAE"> <kie:width>50</kie:width> <kie:width>100</kie:width> <kie:width>100</kie:width> <kie:width>100</kie:width> </kie:ComponentWidths> </kie:ComponentsWidthsExtension> </di:extension> <dmndi:DMNShape id="dmnshape-_F9685B74-0C69-4982-B3B6-B04A14D79EDB" dmnElementRef="_F9685B74-0C69-4982-B3B6-B04A14D79EDB" isCollapsed="false"> <dmndi:DMNStyle> <dmndi:FillColor red="255" green="255" blue="255"/> <dmndi:StrokeColor red="0" green="0" blue="0"/> <dmndi:FontColor red="0" green="0" blue="0"/> </dmndi:DMNStyle> <dc:Bounds x="404" y="464" width="100" height="50"/> <dmndi:DMNLabel/> </dmndi:DMNShape> <dmndi:DMNShape id="dmnshape-_0D2BD7A9-ACA1-49BE-97AD-19699E0C9852" dmnElementRef="_0D2BD7A9-ACA1-49BE-97AD-19699E0C9852" isCollapsed="false"> <dmndi:DMNStyle> <dmndi:FillColor red="255" green="255" blue="255"/> <dmndi:StrokeColor red="0" green="0" blue="0"/> <dmndi:FontColor red="0" green="0" blue="0"/> </dmndi:DMNStyle> <dc:Bounds x="404" y="311" width="100" height="50"/> <dmndi:DMNLabel/> </dmndi:DMNShape> <dmndi:DMNEdge id="dmnedge-_2F819B03-36B7-4DEB-AED6-2B46AE3ADB75" dmnElementRef="_2F819B03-36B7-4DEB-AED6-2B46AE3ADB75"> <di:waypoint x="504" y="489"/> <di:waypoint x="404" y="336"/> </dmndi:DMNEdge> </dmndi:DMNDiagram> </dmndi:DMNDI> </dmn:definitions>
要使用 DMN 模型器在 VSCode 中创建这个示例 DMN 模型,请按照以下步骤执行:
-
打开空的
PersonDecisions.dmn
文件,点 DMN 模型器右上角的 Properties 图标,并确认 DMN 模型 名称 已设置为PersonDecisions
。 -
在左侧面板中,选择 DMN Input Data,将节点拖到 canvas,然后双击节点将其命名为
Person
。 -
在左侧面板中,将 DMN Decision 节点拖到 canvas 中,双击节点来命名
它
,并从输入节点链接到它。 - 选择决策节点以显示节点选项,然后单击 Edit 图标以打开 DMN 框表达式编辑器,以定义节点的决策逻辑。
- 单击 未定义表达式 字段,然后选择 Decision Table。
- 单击决策表的左上角,将命中策略设置为 Unique。
设置输入和输出列,以便使用类型
号的
输入源Person.Age
决定年龄限制和输出目标isAdult
,类型布尔值
决定 adult 状态:图 5.4.
isAdult
决策的 DMN 决策示例在上选项卡选项中,选择 Data Types 选项卡并添加以下
tPerson
结构化数据类型和嵌套数据类型:图 5.5. DMN 数据类型示例
- 定义数据类型后,选择 Editor 选项卡来返回到 DMN modeler canvas。
-
选择 Person 输入节点,点 Properties 图标,并在 Information 项 下,将 Data type 设置为
tPerson
。 -
选择 isAdult 决策节点,单击 Properties 图标,然后在 Information 项 下,确认 数据类型 仍设置为
布尔值
。您之前在创建路由表时设置此数据类型。 - 保存 DMN 决策文件。
-
打开空的
5.1. 使用 DRL 规则单元作为替代决策服务
您还可以使用作为规则单元实施的 dols 规则语言(DRL)文件来定义此示例决策服务,作为使用决策模型和表示法(DMN)的替代选择。
DRL 规则单元是规则和执行单元的模块。规则单元收集一组规则,其中包含规则所针对的事实类型的声明。规则单元也充当每个组规则的唯一命名空间。单个规则基础可以包含多个规则单元。您通常将单元的所有规则存储在与单元声明相同的文件中,以便该单元自我包含。有关规则单元的更多信息,请参阅使用 DRL 规则设计决策服务。
先决条件
- 您已创建了一个项目。有关创建 Maven 项目的更多信息,请参阅 第 3 章 为红帽构建的 Kogito 微服务创建一个 Maven 项目。
流程
在示例项目的
src/main/resources
文件夹中,而不是使用 DMN 文件,添加以下PersonRules.drl
文件:PersonRules
DRL 文件示例package org.acme unit PersonRules; import org.acme.Person; rule isAdult when $person: /person[ age > 18 ] then modify($person) { setAdult(true) }; end query persons $p : /person[ adult ] end
这个示例规则决定了任何超过 18 的用户都被归类为 adult。规则文件还声明该规则属于规则单元
PersonRules
。构建项目时,将生成规则单元并与 DRL 文件相关联。规则还使用 OOPath 表示法定义条件。OOPath 是 XPath 的面向对象的语法扩展,用于在处理集合和过滤限制的同时通过相关元素导航。
您还可以使用传统规则模式语法以更明确的形式重写相同的规则条件,如下例所示:
使用传统表示法的
PersonRules
DRL 文件示例package org.acme unit PersonRules; import org.acme.Person; rule isAdult when $person: Person(age > 18) from person then modify($person) { setAdult(true) }; end query persons $p : /person[ adult ] end
第 6 章 运行红帽构建的 Kogito 微服务
在为红帽构建的 Kogito 微服务设计了决策后,您可以使用以下模式之一运行 Red Hat build of Quarkus 或 Spring Boot 应用程序:
- 开发模式 :用于本地测试。在 Red Hat build of Quarkus 中,开发模式还为您的运行的应用程序提供了实时重新加载,以进行高级调试。
- JVM 模式 :为了与 Java 虚拟机(JVM)兼容。
流程
在命令终端中,导航到包含红帽构建的 Kogito 微服务的项目,并根据您的首选运行模式和应用程序环境输入以下命令之一:
对于开发模式:
在 Red Hat build of Quarkus 上
$ mvn clean compile quarkus:dev
在 Sprint Boot 中
$ mvn clean compile spring-boot:run
对于 JVM 模式:
在红帽构建的 Quarkus 和 Spring Boot 上
$ mvn clean package $ java -jar target/sample-kogito-1.0-SNAPSHOT-runner.jar
第 7 章 与正在运行的红帽构建的 Kogito 微服务交互
在红帽构建的 Kogito 微服务运行后,您可以发送 REST API 请求以与应用程序交互,并根据您设置应用程序的方式执行微服务。
本例测试在 PersonDecisions.dmn
文件中自动生成的决策的 /persons
REST API 端点(如果使用 DRL 规则单元,则为 PersonRules.drl
文件中的规则)。
在本例中,使用 REST 客户端、curl 工具或为应用程序配置的 Swagger UI (如 http://localhost:8080/q/swagger-ui
或 http://localhost:8080/swagger-ui.html)
来发送带有以下组件的 API 请求:
-
URL:
http://localhost:8080/persons
HTTP 标头: 只适用对于
POST
请求:-
接受
:application/json
-
Content-type
:application/json
-
-
HTTP 方法 :
GET
、POST
或DELETE
添加 adult (JSON)的 POST 请求正文示例
{ "person": { "name": "John Quark", "age": 20 } }
添加 adult 的 curl 命令示例
curl -X POST http://localhost:8080/persons -H 'content-type: application/json' -H 'accept: application/json' -d '{"person": {"name":"John Quark", "age": 20}}'
响应示例(JSON)
{ "id": "3af806dd-8819-4734-a934-728f4c819682", "person": { "name": "John Quark", "age": 20, "adult": false }, "isAdult": true }
这个示例流程使用 curl 命令方便。
流程
在独立于正在运行的应用程序的命令终端窗口中,导航到包含您红帽构建的 Kogito 微服务的项目,并使用以下 curl 命令和 JSON 请求与正在运行的微服务交互:
在 Spring Boot 中,您可能需要修改应用程序如何公开 API 端点,以便这些示例请求正常工作。如需更多信息,请参阅您为本教程创建的 Spring Boot 项目中包含的 README
文件。
添加一个 adult 人员:
请求示例
curl -X POST http://localhost:8080/persons -H 'content-type: application/json' -H 'accept: application/json' -d '{"person": {"name":"John Quark", "age": 20}}'
响应示例
{"id":"3af806dd-8819-4734-a934-728f4c819682","person":{"name":"John Quark","age":20,"adult":false},"isAdult":true}
添加一个下划线人员:
请求示例
curl -X POST http://localhost:8080/persons -H 'content-type: application/json' -H 'accept: application/json' -d '{"person": {"name":"Jenny Quark", "age": 15}}'
响应示例
{"id":"8eef502b-012b-4628-acb7-73418a089c08","person":{"name":"Jenny Quark","age":15,"adult":false},"isAdult":false}
使用返回的 UUID 完成评估:
请求示例
curl -X POST http://localhost:8080/persons/8eef502b-012b-4628-acb7-73418a089c08/ChildrenHandling/cdec4241-d676-47de-8c55-4ee4f9598bac -H 'content-type: application/json' -H 'accept: application/json' -d '{}'
部分 II. 在 Red Hat OpenShift Container Platform 上部署红帽构建的 Kogito 微服务
作为商业决策和流程的开发人员,您可以在 Red Hat OpenShift Container Platform 上为云实施部署红帽构建的 Kogito 微服务。RHPAM Kogito Operator 自动执行许多部署步骤,供您完成部署过程。
先决条件
- 安装了 Red Hat OpenShift Container Platform 4.6 或 4.7。
- 为部署创建了 OpenShift 项目。
第 8 章 Red Hat OpenShift Container Platform 上的 Red Hat build of Kogito
您可以在 Red Hat OpenShift Container Platform 上为云实施部署红帽构建的 Kogito 微服务。在此架构中,红帽构建的 Kogito 微服务被部署为 OpenShift pod,您可以单独扩展和缩减,以根据特定服务的要求提供尽量少或多的容器。
为了帮助您在 OpenShift 上部署红帽构建的 Kogito 微服务,Red Hat Process Automation Manager 提供了 Red Hat Process Automation Manager Kogito Operator。此操作器指导您完成部署过程。Operator 基于 Operator SDK,并为您自动执行许多部署步骤。例如,当您为 Operator 提供包含应用程序的 Git 存储库的链接时,Operator 会自动配置从源构建项目和部署生成的服务所需的组件。
要在 OpenShift Web 控制台中安装 Red Hat Process Automation Manager Kogito Operator,在左侧菜单中进入 Operators → OperatorHub,搜索并选择 RHPAM Kogito Operator,并按照屏幕上的说明来安装最新的 Operator 版本。
第 9 章 带有 RHPAM Kogito Operator 的 OpenShift 部署选项
创建红帽构建的 Kogito 微服务作为新应用程序的一部分后,您可以使用 Red Hat OpenShift Container Platform Web 控制台来部署微服务。OpenShift Web 控制台中的 RHPAM Kogito Operator 页面指导您完成部署过程。
RHPAM Kogito Operator 支持在 Red Hat OpenShift Container Platform 上构建和部署红帽构建的 Kogito 微服务:
- Git 源构建和部署
- 二进制构建和部署
- 自定义镜像构建和部署
- 文件构建和部署
9.1. 使用 Git 源构建和 OpenShift Web 控制台在 OpenShift 上部署红帽构建的 Kogito 微服务
RHPAM Kogito Operator 使用以下自定义资源来部署特定于域的微服务(您开发的微服务):
-
KogitoBuild
使用 Git URL 或其他源构建应用程序,并生成运行时镜像。 -
KogitoRuntime
启动运行时镜像,并根据您的要求进行配置。
在大多数情况下,您可以使用标准运行时构建和部署方法从 Git 存储库源在 OpenShift 上部署红帽构建的 Kogito 微服务,如以下步骤所示。
如果您要在本地开发或测试红帽构建的 Kogito 微服务,您可以使用二进制构建、自定义镜像构建或文件构建选项从本地源而不是从 Git 存储库构建和部署。
先决条件
- 已安装 RHPAM Kogito Operator。
- 红帽构建的 Kogito 微服务的应用位于可从 OpenShift 环境访问的 Git 存储库中。
-
您可以使用必要的权限访问 OpenShift Web 控制台,以便创建和编辑
KogitoBuild
和KogitoRuntime
。 (红帽只构建的 Quarkus)项目的
pom.xml
文件包含以下quarkus-smallrye-health
扩展的依赖项:此扩展启用了红帽在 OpenShift 上构建 Quarkus 项目所需的 存活度和就绪度探测。对于 Red Hat 在 OpenShift 上构建 Quarkus 应用程序的小型健康状况依赖项
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-health</artifactId> </dependency>
流程
- 进入 Operators → Installed Operators 并选择 RHPAM Kogito Operator。
- 要创建红帽构建的 Kogito 构建定义,请在 operator 页面中选择 Kogito Build 选项卡,再点 Create KogitoBuild。
在应用程序窗口中,使用 Form View 或 YAML View 来配置构建定义。
至少,定义以下示例 YAML 文件中显示的应用程序配置:
红帽构建的 Quarkus 应用程序的 YAML 定义示例,红帽构建的 Kogito 构建
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this service kind: KogitoBuild # Application type metadata: name: example-quarkus # Application name spec: type: RemoteSource gitSource: uri: 'https://github.com/kiegroup/kogito-examples' # Git repository containing application (uses default branch) contextDir: dmn-quarkus-example # Git folder location of application
红帽构建的 Kogito 构建的 Spring Boot 应用程序的 YAML 定义示例
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this service kind: KogitoBuild # Application type metadata: name: example-springboot # Application name spec: runtime: springboot type: RemoteSource gitSource: uri: 'https://github.com/kiegroup/kogito-examples' # Git repository containing application (uses default branch) contextDir: dmn-springboot-example # Git folder location of application
注意如果您配置了内部 Maven 存储库,您可以将其用作 Maven 镜像服务,并在 Red Hat build of Kogito 构建定义中指定 Maven 镜像 URL 以大大缩短构建时间:
spec: mavenMirrorURL: http://nexus3-nexus.apps-crc.testing/repository/maven-public/
有关内部 Maven 存储库的更多信息,请参阅 Apache Maven 文档。
在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 构建。
您的应用程序列在 Red Hat build of KogitoBuilds 页面中。您可以选择应用程序名称来查看或修改应用程序设置和 YAML 详情。
- 要创建红帽构建的 Kogito 微服务定义,请在 operator 页面中选择 Kogito Runtime 选项卡,再点 Create KogitoRuntime。
在应用程序窗口中,使用 Form View 或 YAML View 来配置微服务定义。
至少,定义以下示例 YAML 文件中显示的应用程序配置:
红帽构建的 Quarkus 应用程序的 YAML 定义示例,红帽构建的 Kogito 微服务
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this microservice kind: KogitoRuntime # Application type metadata: name: example-quarkus # Application name
红帽构建的 Kogito 微服务的 Spring Boot 应用程序的 YAML 定义示例
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this microservice kind: KogitoRuntime # Application type metadata: name: example-springboot # Application name spec: runtime: springboot
注意在本例中,应用程序从 Git 构建,并使用 KogitoRuntime 部署。您必须确保应用程序名称在
KogitoBuild
和KogitoRuntime
中相同。在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 微服务。
您的应用程序在红帽构建的 Kogito 微服务页面中列出。您可以选择应用程序名称来查看或修改应用程序设置以及 YAML 文件的内容。
在 Web 控制台的左侧菜单中,进入 Builds → Builds 来查看应用程序构建的状态。
您可以选择特定的构建来查看构建详情。
注意对于您为 OpenShift 部署创建的 Kogito 微服务的每个红帽构建,在 web 控制台的 Builds 页面中生成并列出两个构建:传统的运行时构建和 Source-to-Image (S2I)构建,后缀为
-builder
。S2I 机制在 OpenShift 构建中构建应用程序,然后将构建的应用传递给下一个 OpenShift 构建,以打包到运行时容器镜像中。红帽构建的 Kogito S2I 构建配置还允许您直接从 OpenShift 平台上的 Git 存储库构建项目。- 应用程序构建完成后,进入 Workloads → Deployments 来查看应用程序部署、Pod 状态和其他详情。
部署红帽构建的 Kogito 微服务后,在 web 控制台的左侧菜单中,进入 Networking → Routes 以查看部署的应用程序的访问链接。
您可以选择应用程序名称来查看或修改路由设置。
利用应用程序路由,您可以根据需要将红帽构建的 Kogito 微服务与自动化解决方案集成。
9.2. 使用二进制构建和 OpenShift Web 控制台在 OpenShift 上部署红帽构建的 Kogito 微服务
OpenShift 构建可能需要大量时间。作为在 OpenShift 上构建和部署红帽构建的 Kogito 微服务的快速替代方案,您可以使用二进制构建。
Operator 使用以下自定义资源来部署特定于域的微服务(您开发的微服务):
-
KogitoBuild
处理上传的应用程序并生成运行时镜像。 -
KogitoRuntime
启动运行时镜像,并根据您的要求进行配置。
先决条件
- 已安装 RHPAM Kogito Operator。
-
已安装
oc
OpenShift CLI 并登录到相关的 OpenShift 集群。有关oc
安装和登录说明,请参阅 OpenShift 文档。 -
您可以使用必要的权限访问 OpenShift Web 控制台,以便创建和编辑
KogitoBuild
和KogitoRuntime
。 (红帽只构建的 Quarkus)项目的
pom.xml
文件包含以下quarkus-smallrye-health
扩展的依赖项:此扩展启用了红帽在 OpenShift 上构建 Quarkus 项目所需的 存活度和就绪度探测。对于 Red Hat 在 OpenShift 上构建 Quarkus 应用程序的小型健康状况依赖项
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-health</artifactId> </dependency>
流程
- 在本地构建应用程序。
- 进入 Operators → Installed Operators 并选择 RHPAM Kogito Operator。
- 要创建红帽构建的 Kogito 构建定义,请在 operator 页面中选择 Kogito Build 选项卡,再点 Create KogitoBuild。
在应用程序窗口中,使用 Form View 或 YAML View 来配置构建定义。
至少,定义以下示例 YAML 文件中显示的应用程序配置:
红帽构建的 Quarkus 应用程序的 YAML 定义示例,红帽构建的 Kogito 构建
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this service kind: KogitoBuild # Application type metadata: name: example-quarkus # Application name spec: type: Binary
红帽构建的 Kogito 构建的 Spring Boot 应用程序的 YAML 定义示例
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this service kind: KogitoBuild # Application type metadata: name: example-springboot # Application name spec: runtime: springboot type: Binary
在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 构建。
您的应用程序列在 Red Hat build of KogitoBuilds 页面中。您可以选择应用程序名称来查看或修改应用程序设置和 YAML 详情。
使用以下命令上传构建的二进制文件:
$ oc start-build example-quarkus --from-dir=target/ -n namespace
-
from-dir
等于
构建应用程序的目标文件夹路径。 -
namespace
是创建KogitoBuild
的命名空间。
-
- 要创建红帽构建的 Kogito 微服务定义,请在 operator 页面中选择 Kogito Runtime 选项卡,再点 Create KogitoRuntime。
在应用程序窗口中,使用 Form View 或 YAML View 来配置微服务定义。
至少,定义以下示例 YAML 文件中显示的应用程序配置:
红帽构建的 Quarkus 应用程序的 YAML 定义示例,红帽构建的 Kogito 微服务
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this microservice kind: KogitoRuntime # Application type metadata: name: example-quarkus # Application name
红帽构建的 Kogito 微服务的 Spring Boot 应用程序的 YAML 定义示例
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this microservice kind: KogitoRuntime # Application type metadata: name: example-springboot # Application name spec: runtime: springboot
注意在这种情况下,应用程序在本地构建并使用 KogitoRuntime 部署。您必须确保应用程序名称在
KogitoBuild
和KogitoRuntime
中相同。在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 微服务。
您的应用程序在红帽构建的 Kogito 微服务页面中列出。您可以选择应用程序名称来查看或修改应用程序设置以及 YAML 文件的内容。
在 Web 控制台的左侧菜单中,进入 Builds → Builds 来查看应用程序构建的状态。
您可以选择特定的构建来查看构建详情。
- 应用程序构建完成后,进入 Workloads → Deployments 来查看应用程序部署、Pod 状态和其他详情。
部署红帽构建的 Kogito 微服务后,在 web 控制台的左侧菜单中,进入 Networking → Routes 以查看部署的应用程序的访问链接。
您可以选择应用程序名称来查看或修改路由设置。
利用应用程序路由,您可以根据需要将红帽构建的 Kogito 微服务与自动化解决方案集成。
9.3. 使用自定义镜像构建和 OpenShift Web 控制台在 OpenShift 上部署红帽构建的 Kogito 微服务
您可以使用自定义镜像构建作为在 OpenShift 上构建和部署红帽构建的 Kogito 微服务的替代选择。
Operator 使用以下自定义资源来部署特定于域的微服务(您开发的微服务):
-
KogitoRuntime
启动运行时镜像,并根据您的要求进行配置。
先决条件
- 已安装 RHPAM Kogito Operator。
-
您可以使用必要的权限访问 OpenShift Web 控制台,以便创建和编辑
KogitoRuntime
。 (红帽只构建的 Quarkus)项目的
pom.xml
文件包含以下quarkus-smallrye-health
扩展的依赖项:此扩展启用了红帽在 OpenShift 上构建 Quarkus 项目所需的 存活度和就绪度探测。对于 Red Hat 在 OpenShift 上构建 Quarkus 应用程序的小型健康状况依赖项
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-health</artifactId> </dependency>
流程
- 在本地构建应用程序。
在项目根文件夹中创建
Containerfile
,其内容如下:红帽构建的 Quarkus 应用程序的
Containerfile
示例FROM registry.redhat.io/rhpam-7/rhpam-kogito-runtime-jvm-rhel8:7.11.0 ENV RUNTIME_TYPE quarkus COPY target/quarkus-app/lib/ $KOGITO_HOME/bin/lib/ COPY target/quarkus-app/*.jar $KOGITO_HOME/bin COPY target/quarkus-app/app/ $KOGITO_HOME/bin/app/ COPY target/quarkus-app/quarkus/ $KOGITO_HOME/bin/quarkus/
Spring Boot 应用程序的
Containerfile
示例FROM registry.redhat.io/rhpam-7/rhpam-kogito-runtime-jvm-rhel8:7.11.0 ENV RUNTIME_TYPE springboot COPY target/<application-jar-file> $KOGITO_HOME/bin
-
application-jar-file
是应用的 JAR 文件的名称。
-
使用以下命令构建红帽构建的 Kogito 镜像:
podman build --tag <final-image-name> -f <Container-file>
在上一命令中,last
-image-name
是 Red Hat build of Kogito 镜像的名称,Container-file
是您上一步中创建的Containerfile
的名称。另外,使用以下命令测试构建的镜像:
podman run --rm -it -p 8080:8080 <final-image-name>
使用以下命令将构建的 Red Hat build of Kogito 镜像推送到镜像 registry:
podman push <final-image-name>
- 进入 Operators → Installed Operators 并选择 RHPAM Kogito Operator。
- 要创建红帽构建的 Kogito 微服务定义,请在 operator 页面中选择 Kogito Runtime 选项卡,再点 Create KogitoRuntime。
在应用程序窗口中,使用 Form View 或 YAML View 来配置微服务定义。
至少,定义以下示例 YAML 文件中显示的应用程序配置:
红帽构建的 Quarkus 应用程序的 YAML 定义示例,红帽构建的 Kogito 微服务
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this microservice kind: KogitoRuntime # Application type metadata: name: example-quarkus # Application name spec: image: <final-image-name> # Kogito image name insecureImageRegistry: true # Can be omitted when image is pushed into secured registry with valid certificate
红帽构建的 Kogito 微服务的 Spring Boot 应用程序的 YAML 定义示例
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this microservice kind: KogitoRuntime # Application type metadata: name: example-springboot # Application name spec: image: <final-image-name> # Kogito image name insecureImageRegistry: true # Can be omitted when image is pushed into secured registry with valid certificate runtime: springboot
在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 微服务。
您的应用程序在红帽构建的 Kogito 微服务页面中列出。您可以选择应用程序名称来查看或修改应用程序设置以及 YAML 文件的内容。
- 应用程序构建完成后,进入 Workloads → Deployments 来查看应用程序部署、Pod 状态和其他详情。
部署红帽构建的 Kogito 微服务后,在 web 控制台的左侧菜单中,进入 Networking → Routes 以查看部署的应用程序的访问链接。
您可以选择应用程序名称来查看或修改路由设置。
利用应用程序路由,您可以根据需要将红帽构建的 Kogito 微服务与自动化解决方案集成。
9.4. 使用文件构建和 OpenShift Web 控制台在 OpenShift 上部署红帽构建的 Kogito 微服务
您可以从单个文件构建和部署红帽构建的 Kogito 微服务,如决策模型和表示法(DMN)、Jols 规则语言(DRL)或属性文件,或者从具有多个文件的目录。您可以从本地文件系统路径指定单个文件,或者只指定本地文件系统路径的文件系统目录。将文件或目录上传到 OpenShift 集群时,会自动触发新的 Source-to-Image (S2I)构建。
Operator 使用以下自定义资源来部署特定于域的微服务(您开发的微服务):
-
KogitoBuild
从文件生成应用程序并生成运行时镜像。 -
KogitoRuntime
启动运行时镜像,并根据您的要求进行配置。
先决条件
- 已安装 RHPAM Kogito Operator。
-
已安装
oc
OpenShift CLI 并登录到相关的 OpenShift 集群。有关oc
安装和登录说明,请参阅 OpenShift 文档。 -
您可以使用必要的权限访问 OpenShift Web 控制台,以便创建和编辑
KogitoBuild
和KogitoRuntime
。
流程
- 进入 Operators → Installed Operators 并选择 RHPAM Kogito Operator。
- 要创建红帽构建的 Kogito 构建定义,请在 operator 页面中选择 Kogito Build 选项卡,再点 Create KogitoBuild。
在应用程序窗口中,使用 Form View 或 YAML View 来配置构建定义。
至少,定义以下示例 YAML 文件中显示的应用程序配置:
红帽构建的 Quarkus 应用程序的 YAML 定义示例,红帽构建的 Kogito 构建
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this service kind: KogitoBuild # Application type metadata: name: example-quarkus # Application name spec: type: LocalSource
红帽构建的 Kogito 构建的 Spring Boot 应用程序的 YAML 定义示例
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this service kind: KogitoBuild # Application type metadata: name: example-springboot # Application name spec: runtime: springboot type: LocalSource
注意如果您配置了内部 Maven 存储库,您可以将其用作 Maven 镜像服务,并在 Red Hat build of Kogito 构建定义中指定 Maven 镜像 URL 以大大缩短构建时间:
spec: mavenMirrorURL: http://nexus3-nexus.apps-crc.testing/repository/maven-public/
有关内部 Maven 存储库的更多信息,请参阅 Apache Maven 文档。
在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 构建。
您的应用程序列在 Red Hat build of KogitoBuilds 页面中。您可以选择应用程序名称来查看或修改应用程序设置和 YAML 详情。
使用以下命令上传文件资产:
$ oc start-build example-quarkus-builder --from-file=<file-asset-path> -n namespace
-
file-asset-path
是您要上传的文件资产的路径。 -
namespace
是创建KogitoBuild
的命名空间。
-
- 要创建红帽构建的 Kogito 微服务定义,请在 operator 页面中选择 Kogito Runtime 选项卡,再点 Create KogitoRuntime。
在应用程序窗口中,使用 Form View 或 YAML View 来配置微服务定义。
至少,定义以下示例 YAML 文件中显示的应用程序配置:
红帽构建的 Quarkus 应用程序的 YAML 定义示例,红帽构建的 Kogito 微服务
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this microservice kind: KogitoRuntime # Application type metadata: name: example-quarkus # Application name
红帽构建的 Kogito 微服务的 Spring Boot 应用程序的 YAML 定义示例
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this microservice kind: KogitoRuntime # Application type metadata: name: example-springboot # Application name spec: runtime: springboot
注意在这种情况下,应用程序从文件构建,并使用 KogitoRuntime 部署。您必须确保应用程序名称在
KogitoBuild
和KogitoRuntime
中相同。在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 微服务。
您的应用程序在红帽构建的 Kogito 微服务页面中列出。您可以选择应用程序名称来查看或修改应用程序设置以及 YAML 文件的内容。
在 Web 控制台的左侧菜单中,进入 Builds → Builds 来查看应用程序构建的状态。
您可以选择特定的构建来查看构建详情。
注意对于您为 OpenShift 部署创建的 Kogito 微服务的每个红帽构建,在 web 控制台的 Builds 页面中生成并列出两个构建:传统的运行时构建和 Source-to-Image (S2I)构建,后缀为
-builder
。S2I 机制在 OpenShift 构建中构建应用程序,然后将构建的应用传递给下一个 OpenShift 构建,以打包到运行时容器镜像中。- 应用程序构建完成后,进入 Workloads → Deployments 来查看应用程序部署、Pod 状态和其他详情。
部署红帽构建的 Kogito 微服务后,在 web 控制台的左侧菜单中,进入 Networking → Routes 以查看部署的应用程序的访问链接。
您可以选择应用程序名称来查看或修改路由设置。
利用应用程序路由,您可以根据需要将红帽构建的 Kogito 微服务与自动化解决方案集成。
第 10 章 Red Hat OpenShift Container Platform 上构建的 Kogito 微服务的探测
Red Hat OpenShift Container Platform 中的探测验证应用程序是否正常工作或需要重启。对于红帽构建的 Quarkus 和 Spring Boot 的 Kogito 微服务,探测使用 HTTP 请求与应用程序交互,默认为扩展公开的端点。因此,要在 Red Hat OpenShift Container Platform 上运行红帽构建的 Kogito 微服务,您必须导入扩展,以便为 存活度、就绪度和启动探测 提供应用程序可用性信息。
10.1. 为 Red Hat OpenShift Container Platform 上的 Red Hat build of Quarkus 应用程序添加健康检查扩展
您可以为红帽构建的 Kogito 服务添加健康检查扩展,这些服务基于 Red Hat OpenShift Container Platform 上构建的 Quarkus 版本。
流程
在命令终端中,导航到项目的 pom.xml
文件,并为 quarkus-smallrye-health
扩展添加以下依赖项:
对 Red Hat OpenShift Container Platform 上的 Red Hat build of Quarkus 应用程序的影响较小
<dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-health</artifactId> </dependency> </dependencies>
10.2. 在 Red Hat OpenShift Container Platform 上为 Spring Boot 应用程序添加健康检查扩展
您可以为红帽构建的 Kogito 微服务添加健康检查扩展,这些微服务基于 Red Hat OpenShift Container Platform 上的 Spring Boot。
流程
在命令终端中,导航到项目的 pom.xml
文件,并添加以下 Spring Boot actuator 依赖项:
Spring Boot actuator 在 Red Hat OpenShift Container Platform 上对 Spring Boot 应用程序的依赖项
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
10.3. 在 Red Hat OpenShift Container Platform 上为红帽构建的 Kogito 微服务设置自定义探测
您还可以为存活度、就绪度和启动探测配置自定义端点。
流程
-
在项目的
KogitoRuntime
YAML 文件中定义探测,如下例所示:
红帽使用自定义探测端点构建的 Kogito 微服务自定义资源示例
apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this service kind: KogitoRuntime metadata: name: process-quarkus-example # Application name spec: replicas: 1 probes: livenessProbe: httpGet: path: /probes/live # Liveness endpoint port: 8080 readinessProbe: httpGet: path: /probes/ready # Readiness endpoint port: 8080 startupProbe: tcpSocket: port: 8080
第 11 章 Red Hat Process Automation Manager Kogito Operator 与 Prometheus 和 Grafana 交互
Red Hat Process Automation Manager 中的 Red Hat build of Kogito 提供了一个 monitoring-prometheus-addon
附加组件,它为 Red Hat build of Kogito 微服务启用 Prometheus 指标监控,并生成 Grafana 仪表板,以使用附加组件导出的默认指标。RHPAM Kogito Operator 使用 Prometheus Operator 从项目中公开用于 Prometheus 的指标,以便提取。由于此依赖项,Prometheus Operator 必须安装在与项目相同的命名空间中。
如果要为红帽构建的 Kogito 微服务启用 Prometheus 指标监控,请根据您使用的框架,将以下依赖项添加到项目中的 pom.xml
文件中:
Prometheus 红帽构建的 Quarkus 附加组件的依赖项
<dependency> <groupId>org.kie.kogito</groupId> <artifactId>monitoring-prometheus-quarkus-addon</artifactId> </dependency>
Prometheus Spring Boot 附加组件的依赖项
<dependency> <groupId>org.kie.kogito</groupId> <artifactId>monitoring-prometheus-springboot-addon</artifactId> </dependency>
当您部署使用 monitoring-prometheus-addon
附加组件的 Kogito 微服务且安装了 Prometheus Operator 时,Red Hat Process Automation Manager Kogito Operator 会创建一个 ServiceMonitor
自定义资源来公开 Prometheus 的指标,如下例所示:
Prometheus 的 ServiceMonitor
资源示例
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: app: onboarding-service name: onboarding-service namespace: kogito spec: endpoints: - path: /metrics targetPort: 8080 scheme: http namespaceSelector: matchNames: - kogito selector: matchLabels: app: onboarding-service
您必须手动配置由 Prometheus
Operator 管理的 Prometheus 自定义资源,以选择 ServiceMonitor
资源:
Prometheus
资源示例
apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: prometheus spec: serviceAccountName: prometheus serviceMonitorSelector: matchLabels: app: dmn-drools-quarkus-metrics-service
使用 ServiceMonitor
资源配置 Prometheus 资源后,您可以在 Prometheus web 控制台的 Targets 页面中看到 Prometheus 提取的端点。Red Hat Process Automation Manager 服务公开的指标会出现在 Graph 视图中。
RHPAM Kogito Operator 还会为附加组件生成的每个 Grafana 仪表板创建一个由 Grafana Operator 定义的 GrafanaDashboard
自定义资源。仪表板的 app
标签是所部署的红帽构建的 Kogito 微服务的名称。您必须根据相关的红帽构建的 Kogito 微服务来设置 Grafana
自定义资源的 dashboardLabelSelector
属性。
Grafana
资源示例
apiVersion: integreatly.org/v1alpha1 kind: Grafana metadata: name: example-grafana spec: ingress: enabled: true config: auth: disable_signout_menu: true auth.anonymous: enabled: true log: level: warn mode: console security: admin_password: secret admin_user: root dashboardLabelSelector: - matchExpressions: - key: app operator: In values: - my-kogito-application
第 12 章 红帽构建的 Kogito 微服务部署故障排除
使用本节中的信息,对使用操作器部署 Kogito 微服务时可能会遇到的问题进行故障排除。发现新问题以及发现临时解决方案时,会更新以下信息。
- 没有构建正在运行
如果没有看到任何运行或相关命名空间中创建的构建,请输入以下命令来检索正在运行的 pod 并查看 pod 的 Operator 日志:
查看指定 pod 的 RHPAM Kogito Operator 日志
// Retrieves running pods $ oc get pods NAME READY STATUS RESTARTS AGE kogito-operator-6d7b6d4466-9ng8t 1/1 Running 0 26m // Opens RHPAM Kogito Operator log for the pod $ oc logs -f kogito-operator-6d7b6d4466-9ng8t
- 验证
KogitoRuntime
状态 如果您使用以下 YAML 定义创建带有不存在的镜像的
KogitoRuntime
应用程序:KogitoRuntime
应用程序的 YAML 定义示例apiVersion: rhpam.kiegroup.org/v1 # Red Hat build of Kogito API for this microservice kind: KogitoRuntime # Application type metadata: name: example # Application name spec: image: 'not-existing-image:latest' replicas: 1
您可以使用 bash 控制台中的
oc describe KogitoRuntime example
命令验证KogitoRuntime
应用程序的状态。当您在 bash控制台中运行 oc describe KogitoRuntime 示例
命令时,您会收到以下输出:KogitoRuntime
状态示例[user@localhost ~]$ oc describe KogitoRuntime example Name: example Namespace: username-test Labels: <none> Annotations: <none> API Version: rhpam.kiegroup.org/v1 Kind: KogitoRuntime Metadata: Creation Timestamp: 2021-05-20T07:19:41Z Generation: 1 Managed Fields: API Version: rhpam.kiegroup.org/v1 Fields Type: FieldsV1 fieldsV1: f:spec: .: f:image: f:replicas: Manager: Mozilla Operation: Update Time: 2021-05-20T07:19:41Z API Version: rhpam.kiegroup.org/v1 Fields Type: FieldsV1 fieldsV1: f:spec: f:monitoring: f:probes: .: f:livenessProbe: f:readinessProbe: f:resources: f:runtime: f:status: .: f:cloudEvents: f:conditions: Manager: main Operation: Update Time: 2021-05-20T07:19:45Z Resource Version: 272185 Self Link: /apis/rhpam.kiegroup.org/v1/namespaces/ksuta-test/kogitoruntimes/example UID: edbe0bf1-554e-4523-9421-d074070df982 Spec: Image: not-existing-image:latest Replicas: 1 Status: Cloud Events: Conditions: Last Transition Time: 2021-05-20T07:19:44Z Message: Reason: NoPodAvailable Status: False Type: Deployed Last Transition Time: 2021-05-20T07:19:44Z Message: Reason: RequestedReplicasNotEqualToAvailableReplicas Status: True Type: Provisioning Last Transition Time: 2021-05-20T07:19:45Z Message: you may not have access to the container image "quay.io/kiegroup/not-existing-image:latest" Reason: ImageStreamNotReadyReason Status: True Type: Failed
在输出末尾,您可以看到
KogitoRuntime
状态以及相关消息。
第 13 章 其他资源
附录 A. 版本信息
文档最后在 2022 年 3 月 8 日更新。
附录 B. 联系信息
Red Hat Process Automation Manager 文档团队: brms-docs@redhat.com