在 Red Hat Process Automation Manager 中使用红帽构建的 Kogito


Red Hat Process Automation Manager 7.11

摘要

本文档论述了如何在 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 的最新稳定版本。

流程

  1. 在 VSCode IDE 中,选择 Extensions 菜单选项,并搜索 Red Hat Business Automation Bundle for DMN、Tist 和 test 场景文件支持。

    对于 DMN 或 the 文件支持,您也可以搜索单独的 DMN Editor 或 Tailoring Editor 扩展。

  2. Red Hat Business Automation Bundle 扩展出现在 VSCode 中时,选择它并单击 Install
  3. 对于最佳 VSCode 编辑器行为,请在完成扩展安装后,重新加载或关闭和重新启动 VSCode 实例。

安装 VSCode 扩展捆绑包后,您在 VSCode 中打开或创建的 .dmn.bpmn.bpmn2 文件将自动显示为图形模型。此外,您打开或创建的 .scesim 文件将自动显示为表格测试场景模型,用于测试您的决策功能。

如果 DMN、Trant 或 test 场景模型仅打开 DMN、Tist 或 test 场景文件的 XML 源,并显示错误消息,检查报告的错误和模型文件,以确保正确定义了所有元素。

注意

对于新的 DMN 或 IaaS 模型,您还可以在 Web 浏览器中输入 dmn.newbpmn.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 软件包

�程

  1. 使用以下方法之一安装独立编辑器:

    手动下载每个 JavaScript 文件 :对于此方法,请按照以下步骤执行:

    1. 下载 JavaScript 文件。
    2. 将下载的 Javascript 文件添加到托管应用程序中。
    3. 将以下 &lt ;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 软件包 :对于这个方法,请按照以下步骤执行:

    1. 在您的 package.json 文件中添加 NPM 软件包:

      添加 NPM 软件包

      npm install @redhat/kogito-tooling-kie-editors-standalone

    2. 将每个编辑器库导入到您的 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"

  2. 安装独立编辑器后,使用提供的编辑器 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 (textbinary) 和 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:::MySquareVideo:::PresenterHand。此方法返回一个代表元素位置的 Rect

    envelopeApi: MessageBusClientApi<KogitoEditorEnvelopeApi>

    这是一个高级编辑器 API。有关高级编辑器 API 的更多信息,请参阅 MessageBusClientApiKogitoEditorEnvelopeApi

第 3 章 为红帽构建的 Kogito 微服务创建一个 Maven 项目

在开始开发红帽构建的 Kogito 微服务之前,您需要创建一个 Maven 项目,您可以在其中构建资产以及应用程序的任何其他相关资源。

流程

  1. 在命令终端中,导航到要存储新项目的本地文件夹。
  2. 输入以下命令在定义的文件夹中生成项目:

    在 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>

  3. 在 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-exampledmn-springboot-example :一个决定服务(红帽构建的 Quarkus 或 Spring Boot),它使用 DMN 根据流量违反情况确定驱动程序损失和挂起。
  • rules-quarkus- the :红帽构建的 Quarkus 上的 Hello World 决策服务,带有单个 DRL 规则单元。
  • ruleunit-quarkus-exampleruleunit-springboot-example :决定服务(红帽构建的 Quarkus 或 Spring Boot),它使用带有规则单元的 DRL 来验证 loan 应用程序,并公开 REST 操作来查看应用程序状态。
  • dmn-pmml-quarkus-exampledmn-pmml-springboot-example: 一个决定服务(在 Red Hat build of Quarkus 或 Spring Boot 中),它使用 DMN 和 PMML 来确定根据流量违反情况的驱动程序损失和挂起。
  • dmn-drools-quarkus-metricsdmn-drools-springboot-metrics: 一个决定服务(在 Red Hat build of Quarkus 或 Spring Boot 中)启用和使用 Kogito 的运行时指标监控功能。
  • pmML-quarkus-examplepmml-springboot-example: 一个决定服务(在 Red Hat build of Quarkus 或 Spring Boot 中)使用 PMML。

有关在 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 模型。

先决条件

流程

  1. 在您为 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 状态。

  2. 进入 src/main/resources 文件夹,并添加以下 PersonDecisions.dmn DMN 决策模型:

    图 5.1. PersonDecisions DMN 决策要求图(DRD)示例

    PersonDecisions 决策图的镜像

    图 5.2. isAdult 决策的 DMN 框表达式示例

    PersonDecisions 决策表的镜像

    图 5.3. DMN 数据类型示例

    PersonDecisions 数据类型的镜像

    这个示例 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>&gt; 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>&lt;= 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 模型,请按照以下步骤执行:

    1. 打开空的 PersonDecisions.dmn 文件,点 DMN 模型器右上角的 Properties 图标,并确认 DMN 模型 名称 已设置为 PersonDecisions
    2. 在左侧面板中,选择 DMN Input Data,将节点拖到 canvas,然后双击节点将其命名为 Person
    3. 在左侧面板中,将 DMN Decision 节点拖到 canvas 中,双击节点来命名 ,并从输入节点链接到它。
    4. 选择决策节点以显示节点选项,然后单击 Edit 图标以打开 DMN 框表达式编辑器,以定义节点的决策逻辑。
    5. 单击 未定义表达式 字段,然后选择 Decision Table
    6. 单击决策表的左上角,将命中策略设置为 Unique
    7. 设置输入和输出列,以便使用类型 号的 输入源 Person.Age 决定年龄限制和输出目标 isAdult,类型 布尔值 决定 adult 状态:

      图 5.4. isAdult 决策的 DMN 决策示例

      PersonDecisions 决策表的镜像
    8. 在上选项卡选项中,选择 Data Types 选项卡并添加以下 tPerson 结构化数据类型和嵌套数据类型:

      图 5.5. DMN 数据类型示例

      PersonDecisions 数据类型的镜像
    9. 定义数据类型后,选择 Editor 选项卡来返回到 DMN modeler canvas。
    10. 选择 Person 输入节点,点 Properties 图标,并在 Information 项 下,将 Data type 设置为 tPerson
    11. 选择 isAdult 决策节点,单击 Properties 图标,然后在 Information 项 下,确认 数据类型 仍设置为 布尔值。您之前在创建路由表时设置此数据类型。
    12. 保存 DMN 决策文件。

5.1. 使用 DRL 规则单元作为替代决策服务

您还可以使用作为规则单元实施的 dols 规则语言(DRL)文件来定义此示例决策服务,作为使用决策模型和表示法(DMN)的替代选择。

DRL 规则单元是规则和执行单元的模块。规则单元收集一组规则,其中包含规则所针对的事实类型的声明。规则单元也充当每个组规则的唯一命名空间。单个规则基础可以包含多个规则单元。您通常将单元的所有规则存储在与单元声明相同的文件中,以便该单元自我包含。有关规则单元的更多信息,请参阅使用 DRL 规则设计决策服务

先决条件

流程

  1. 在示例项目的 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-uihttp://localhost:8080/swagger-ui.html)来发送带有以下组件的 API 请求:

  • URL:http://localhost:8080/persons
  • HTTP 标头: 只适用对于 POST 请求:

    • 接受:application/json
    • Content-type:application/json
  • HTTP 方法GETPOSTDELETE

添加 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,在左侧菜单中进入 OperatorsOperatorHub,搜索并选择 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 控制台,以便创建和编辑 KogitoBuildKogitoRuntime
  • (红帽只构建的 Quarkus)项目的 pom.xml 文件包含以下 quarkus-smallrye-health 扩展的依赖项:此扩展启用了红帽在 OpenShift 上构建 Quarkus 项目所需的 存活度和就绪度探测

    对于 Red Hat 在 OpenShift 上构建 Quarkus 应用程序的小型健康状况依赖项

    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-health</artifactId>
    </dependency>

流程

  1. 进入 OperatorsInstalled Operators 并选择 RHPAM Kogito Operator
  2. 要创建红帽构建的 Kogito 构建定义,请在 operator 页面中选择 Kogito Build 选项卡,再点 Create KogitoBuild
  3. 在应用程序窗口中,使用 Form ViewYAML 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 文档。

  4. 在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 构建。

    您的应用程序列在 Red Hat build of KogitoBuilds 页面中。您可以选择应用程序名称来查看或修改应用程序设置和 YAML 详情。

  5. 要创建红帽构建的 Kogito 微服务定义,请在 operator 页面中选择 Kogito Runtime 选项卡,再点 Create KogitoRuntime
  6. 在应用程序窗口中,使用 Form ViewYAML 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 部署。您必须确保应用程序名称在 KogitoBuildKogitoRuntime 中相同。

  7. 在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 微服务。

    您的应用程序在红帽构建的 Kogito 微服务页面中列出。您可以选择应用程序名称来查看或修改应用程序设置以及 YAML 文件的内容。

  8. 在 Web 控制台的左侧菜单中,进入 BuildsBuilds 来查看应用程序构建的状态。

    您可以选择特定的构建来查看构建详情。

    注意

    对于您为 OpenShift 部署创建的 Kogito 微服务的每个红帽构建,在 web 控制台的 Builds 页面中生成并列出两个构建:传统的运行时构建和 Source-to-Image (S2I)构建,后缀为 -builder。S2I 机制在 OpenShift 构建中构建应用程序,然后将构建的应用传递给下一个 OpenShift 构建,以打包到运行时容器镜像中。红帽构建的 Kogito S2I 构建配置还允许您直接从 OpenShift 平台上的 Git 存储库构建项目。

  9. 应用程序构建完成后,进入 WorkloadsDeployments 来查看应用程序部署、Pod 状态和其他详情。
  10. 部署红帽构建的 Kogito 微服务后,在 web 控制台的左侧菜单中,进入 NetworkingRoutes 以查看部署的应用程序的访问链接。

    您可以选择应用程序名称来查看或修改路由设置。

    利用应用程序路由,您可以根据需要将红帽构建的 Kogito 微服务与自动化解决方案集成。

9.2. 使用二进制构建和 OpenShift Web 控制台在 OpenShift 上部署红帽构建的 Kogito 微服务

OpenShift 构建可能需要大量时间。作为在 OpenShift 上构建和部署红帽构建的 Kogito 微服务的快速替代方案,您可以使用二进制构建。

Operator 使用以下自定义资源来部署特定于域的微服务(您开发的微服务):

  • KogitoBuild 处理上传的应用程序并生成运行时镜像。
  • KogitoRuntime 启动运行时镜像,并根据您的要求进行配置。

先决条件

  • 已安装 RHPAM Kogito Operator。
  • 已安装 oc OpenShift CLI 并登录到相关的 OpenShift 集群。有关 oc 安装和登录说明,请参阅 OpenShift 文档
  • 您可以使用必要的权限访问 OpenShift Web 控制台,以便创建和编辑 KogitoBuildKogitoRuntime
  • (红帽只构建的 Quarkus)项目的 pom.xml 文件包含以下 quarkus-smallrye-health 扩展的依赖项:此扩展启用了红帽在 OpenShift 上构建 Quarkus 项目所需的 存活度和就绪度探测

    对于 Red Hat 在 OpenShift 上构建 Quarkus 应用程序的小型健康状况依赖项

    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-health</artifactId>
    </dependency>

流程

  1. 在本地构建应用程序。
  2. 进入 OperatorsInstalled Operators 并选择 RHPAM Kogito Operator
  3. 要创建红帽构建的 Kogito 构建定义,请在 operator 页面中选择 Kogito Build 选项卡,再点 Create KogitoBuild
  4. 在应用程序窗口中,使用 Form ViewYAML 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

  5. 在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 构建。

    您的应用程序列在 Red Hat build of KogitoBuilds 页面中。您可以选择应用程序名称来查看或修改应用程序设置和 YAML 详情。

  6. 使用以下命令上传构建的二进制文件:

    $ oc start-build example-quarkus --from-dir=target/ -n namespace
    • from-dir 等于 构建应用程序的目标文件夹路径。
    • namespace 是创建 KogitoBuild 的命名空间。
  7. 要创建红帽构建的 Kogito 微服务定义,请在 operator 页面中选择 Kogito Runtime 选项卡,再点 Create KogitoRuntime
  8. 在应用程序窗口中,使用 Form ViewYAML 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 部署。您必须确保应用程序名称在 KogitoBuildKogitoRuntime 中相同。

  9. 在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 微服务。

    您的应用程序在红帽构建的 Kogito 微服务页面中列出。您可以选择应用程序名称来查看或修改应用程序设置以及 YAML 文件的内容。

  10. 在 Web 控制台的左侧菜单中,进入 BuildsBuilds 来查看应用程序构建的状态。

    您可以选择特定的构建来查看构建详情。

  11. 应用程序构建完成后,进入 WorkloadsDeployments 来查看应用程序部署、Pod 状态和其他详情。
  12. 部署红帽构建的 Kogito 微服务后,在 web 控制台的左侧菜单中,进入 NetworkingRoutes 以查看部署的应用程序的访问链接。

    您可以选择应用程序名称来查看或修改路由设置。

    利用应用程序路由,您可以根据需要将红帽构建的 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>

流程

  1. 在本地构建应用程序。
  2. 在项目根文件夹中创建 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 文件的名称。
  3. 使用以下命令构建红帽构建的 Kogito 镜像:

    podman build --tag <final-image-name> -f <Container-file>

    在上一命令中,last -image-name 是 Red Hat build of Kogito 镜像的名称,Container-file 是您上一步中创建的 Containerfile 的名称。

  4. 另外,使用以下命令测试构建的镜像:

    podman run --rm -it -p 8080:8080 <final-image-name>
  5. 使用以下命令将构建的 Red Hat build of Kogito 镜像推送到镜像 registry:

    podman push <final-image-name>
  6. 进入 OperatorsInstalled Operators 并选择 RHPAM Kogito Operator
  7. 要创建红帽构建的 Kogito 微服务定义,请在 operator 页面中选择 Kogito Runtime 选项卡,再点 Create KogitoRuntime
  8. 在应用程序窗口中,使用 Form ViewYAML 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

  9. 在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 微服务。

    您的应用程序在红帽构建的 Kogito 微服务页面中列出。您可以选择应用程序名称来查看或修改应用程序设置以及 YAML 文件的内容。

  10. 应用程序构建完成后,进入 WorkloadsDeployments 来查看应用程序部署、Pod 状态和其他详情。
  11. 部署红帽构建的 Kogito 微服务后,在 web 控制台的左侧菜单中,进入 NetworkingRoutes 以查看部署的应用程序的访问链接。

    您可以选择应用程序名称来查看或修改路由设置。

    利用应用程序路由,您可以根据需要将红帽构建的 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 控制台,以便创建和编辑 KogitoBuildKogitoRuntime

流程

  1. 进入 OperatorsInstalled Operators 并选择 RHPAM Kogito Operator
  2. 要创建红帽构建的 Kogito 构建定义,请在 operator 页面中选择 Kogito Build 选项卡,再点 Create KogitoBuild
  3. 在应用程序窗口中,使用 Form ViewYAML 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 文档。

  4. 在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 构建。

    您的应用程序列在 Red Hat build of KogitoBuilds 页面中。您可以选择应用程序名称来查看或修改应用程序设置和 YAML 详情。

  5. 使用以下命令上传文件资产:

    $ oc start-build example-quarkus-builder --from-file=<file-asset-path> -n namespace
    • file-asset-path 是您要上传的文件资产的路径。
    • namespace 是创建 KogitoBuild 的命名空间。
  6. 要创建红帽构建的 Kogito 微服务定义,请在 operator 页面中选择 Kogito Runtime 选项卡,再点 Create KogitoRuntime
  7. 在应用程序窗口中,使用 Form ViewYAML 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 部署。您必须确保应用程序名称在 KogitoBuildKogitoRuntime 中相同。

  8. 在定义了应用程序数据后,点 Create 生成红帽构建的 Kogito 微服务。

    您的应用程序在红帽构建的 Kogito 微服务页面中列出。您可以选择应用程序名称来查看或修改应用程序设置以及 YAML 文件的内容。

  9. 在 Web 控制台的左侧菜单中,进入 BuildsBuilds 来查看应用程序构建的状态。

    您可以选择特定的构建来查看构建详情。

    注意

    对于您为 OpenShift 部署创建的 Kogito 微服务的每个红帽构建,在 web 控制台的 Builds 页面中生成并列出两个构建:传统的运行时构建和 Source-to-Image (S2I)构建,后缀为 -builder。S2I 机制在 OpenShift 构建中构建应用程序,然后将构建的应用传递给下一个 OpenShift 构建,以打包到运行时容器镜像中。

  10. 应用程序构建完成后,进入 WorkloadsDeployments 来查看应用程序部署、Pod 状态和其他详情。
  11. 部署红帽构建的 Kogito 微服务后,在 web 控制台的左侧菜单中,进入 NetworkingRoutes 以查看部署的应用程序的访问链接。

    您可以选择应用程序名称来查看或修改路由设置。

    利用应用程序路由,您可以根据需要将红帽构建的 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 微服务设置自定义探测

您还可以为存活度、就绪度和启动探测配置自定义端点。

流程

  1. 在项目的 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

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.