第 18 章 使用 Maven 存储库实施 HA CEP 服务器以更新 KJAR 服务

您可以实施 HA CEP 服务器,该服务器从您提供的 Maven 存储库检索 KJAR 服务和所有依赖项。在这种情况下,您可以通过在 Maven 存储库中更新它,然后从客户端代码发出调用,随时更新 KJAR 服务。

准备源,构建它,然后将其部署到 Red Hat OpenShift Container Platform 上。在部署服务器前,在 deployment.yaml 文件中设置特定的环境变量。要使用 Maven 存储库,您必须将 UPDATABLEKJAR 变量设置为 true

先决条件

  • 您可以使用 oc 命令行工具以管理员特权登录到项目。
  • 您已配置了可从 Red Hat OpenShift Container Platform 环境访问的 Maven 存储库。

流程

  1. 从红帽客户门户的 软件下载页面下载 rhpam-7.10.0-reference-ement ation.zip 产品。
  2. 提取文件的内容,然后解压缩 rhpam-7.10.0-openshift-drools-hacep-distribution.zip 文件。
  3. 进入 openshift-drools-hacep-distribution/sources 目录。
  4. 根据 sample-hacep-project/sample-hacep-project-kjar 目录中的示例项目检查和修改服务器代码。复杂的事件处理逻辑由 src/main/resources/org/drools/cep 子目录中的 DRL 规则定义。
  5. 使用标准 Maven 命令构建项目:

    mvn clean install -DskipTests

    将生成的 KJAR 和任何所需的依赖项上传到 Maven 存储库。

  6. 为 Red Hat AMQ Streams 启用 OpenShift operator,然后在项目中创建 AMQ Streams (kafka)集群。有关安装 Red Hat AMQ Streams 的详情,请参考在 OpenShift 中使用 AMQ Streams
  7. 要创建服务器操作所需的 kafka 主题,请保留在 openshift-drools-hacep-distribution/sources 目录中,并运行以下命令:

    oc apply -f kafka-topics/control.yaml
    oc apply -f kafka-topics/events.yaml
    oc apply -f kafka-topics/kiesessioninfos.yaml
    oc apply -f kafka-topics/snapshot.yaml
  8. 要启用应用程序对领导选举中使用的 ConfigMap 的访问,请配置基于角色的访问控制。进入 springboot 目录并输入以下命令:

    oc create -f kubernetes/service-account.yaml
    oc create -f kubernetes/role.yaml
    oc create -f kubernetes/role-binding.yaml

    有关在 Red Hat OpenShift Container Platform 中配置基于角色的访问控制的更多信息,请参阅 Red Hat OpenShift Container Platform 产品文档中的 使用 RBAC 定义和应用权限

  9. springboot 目录中,编辑 pom.xml 文件以删除以下依赖项:

    <dependency>
          <groupId>org.kie</groupId>
          <artifactId>sample-hacep-project-kjar</artifactId>
    </dependency>
  10. springboot 目录中,输入以下命令为部署创建镜像并将其推送到为 OpenShift 环境配置的存储库:

    oc new-build --binary --strategy=docker --name openshift-kie-springboot
    oc start-build openshift-kie-springboot --from-dir=. --follow
  11. 输入以下命令检测构建的镜像的名称:

    oc get is/openshift-kie-springboot -o template --template='{{range .status.tags}}{{range .items}}{{.dockerImageReference}}{{end}}{{end}}'
  12. 在文本编辑器中打开 kubernetes/deployment.yaml 文件。
  13. 将现有镜像 URL 替换为上一命令的结果。
  14. 删除以 @ 符号开头的行末尾的所有字符,然后将 :latest 添加到行中。例如:

    image: image-registry.openshift-image-registry.svc:5000/hacep/openshift-kie-springboot:latest
  15. containers: 行和 env: 行下,设置环境变量,如下例所示:

    containers:
      - env:
        - name: UPDATABLEKJAR
          value: "true"
        - name: KJARGAV
          value: <GroupID>:<ArtifactID>:<Version>
        - name: MAVEN_LOCAL_REPO
          value: /app/.m2/repository
        - name: MAVEN_MIRROR_URL
          value: http://<nexus_url>/repository/maven-releases/
        - name: MAVEN_SETTINGS_XML
          value: /app/.m2/settings.xml

    在本例中,将 KJARGAV 变量的值替换为包含 KJAR 服务的 Maven 存储库的组、工件和版本(GAV),并将 MAVEN_MIRROR_URL 变量的值替换为包含您的 KJAR 服务的 Maven 存储库的 URL。

    (可选)设置其他变量。有关支持的环境变量列表,请参阅 第 18.1 节 “HA CEP 服务器支持的可选环境变量”

  16. 保存该文件。
  17. 输入以下命令来部署镜像:

    oc apply -f kubernetes/deployment.yaml

有关从客户端代码触发 KJAR 更新的步骤,请参考 第 19 章 创建 HA CEP 客户端

18.1. HA CEP 服务器支持的可选环境变量

下表列出了您可以为配置为使用 Maven 存储库的 HA CEP 服务器设置的可选环境变量。将这些变量添加到 deployment.yaml 文件中,以在部署过程中设置它们。

注意

要使用 Maven 存储库,请确保为服务器设置 UPDATABLEKJAR KJARGAV 环境变量,如 第 18 章 使用 Maven 存储库实施 HA CEP 服务器以更新 KJAR 服务 所述。

表 18.1. HA CEP 服务器支持的可选环境变量

名称描述示例

MAVEN_LOCAL_REPO

用作本地 Maven 存储库的目录。

/root/.m2/repository

MAVEN_MIRROR_URL

可用于检索工件的 Maven 镜像的基本 URL。

http://nexus3-my-kafka-project.192.168.99.133.nip.io/repository/maven-public/

MAVEN_MIRRORS

如果设置,则会启用多镜像支持。该值包含一个镜像前缀列表,用逗号分开。如果设置了此变量,则其他 MAVEN_MIRROR the 变量的名称必须包含前缀,如 DEV_MAVEN_MIRROR_URLQE_MAVEN_MIRROR_URL

DEV,QE

MAVEN_REPOS

如果设置,则会启用多仓库支持。该值包含一个仓库前缀列表,用逗号分开。如果设置了此变量,则其他 MAVEN_REPO the 变量的名称必须包含前缀,如 DEV_MAVEN_REPO_URLQE_MAVEN_REPO_URL

DEV,QE

MAVEN_SETTINGS_XML

要使用的自定义 Maven settings.xml 文件的位置

/root/.m2/settings.xml

prefix_MAVEN_MIRROR_ID

用于指定镜像的标识符。如果省略,会生成一个唯一 ID。

internal-mirror

prefix_MAVEN_MIRROR_OF

此镜像镜像的存储库 ID。默认为 external :Chis

外部:Chat,!my-repo

prefix_MAVEN_MIRROR_URL

镜像的 URL

http://10.0.0.1:8080/repository/internal

prefix_MAVEN_REPO_HOST

Maven 存储库主机名

repo.example.com

prefix_MAVEN_REPO_ID

Maven 存储库 ID

my-repo

prefix_MAVEN_REPO_LAYOUT

Maven 存储库布局

default

prefix_MAVEN_REPO_USERNAME

Maven 存储库用户名

mavenUser

prefix_MAVEN_REPO_PASSPHRASE

Maven 存储库密码短语

maven1!

prefix_MAVEN_REPO_PASSWORD

Maven 存储库密码

maven1!

prefix_MAVEN_REPO_PATH

Maven 存储库路径

/maven2/

prefix_MAVEN_REPO_PORT

Maven 存储库端口

8080

prefix_MAVEN_REPO_PRIVATE_KEY

用于连接到 Maven 存储库的私钥的本地路径

${user.home}/.ssh/id_dsa

prefix_MAVEN_REPO_PROTOCOL

Maven 存储库协议

http

prefix_MAVEN_REPO_RELEASES_ENABLED

启用 Maven 存储库发行版本

true

prefix_MAVEN_REPO_RELEASES_UPDATE_POLICY

Maven 存储库发行版本更新策略

always

prefix_MAVEN_REPO_SERVICE

Maven 存储库 OpenShift 服务。如果没有指定 URL 或 host/port/protocol,则使用这个值。

buscentr-myapp

prefix_MAVEN_REPO_SNAPSHOTS_ENABLED

启用 Maven 存储库快照

true

prefix_MAVEN_REPO_SNAPSHOTS_UPDATE_POLICY

Maven 存储库快照更新策略

always

prefix_MAVEN_REPO_URL

Maven 存储库的完全限定 URL

http://repo.example.com:8080/maven2/