构建业务的流程自动化






酒店预订和航班预订功能做为私人子流程实施



这些流程称为酒店预订服务和航班预订服务,它们都是做为CDI bean实现的,具备硬编码逻辑以返回预订的航班或酒店。

实验1:编译01应用


您将看到如下应用程序UI。



首先,咱们想要探索咱们服务的语义。
正如咱们在流程图中看到的,执行的第一个节点是Business Rules节点。



此节点执行肯定预订是否须要签证的规则。
规则能够在位于项目的src / main / resources文件夹中的org.acme.travels包中的visa-rules.drl文件中找到。
让咱们快速看一下规则:




新的条目应出如今旅行列表中。
该条目代表须要签证,代表商业规则已经肯定来自波兰旅行到澳大利亚的旅行者须要签证。



单击“任务”按钮。
应出现名为“签证申请”的任务。



在应用程序UI中,使用与前一个彻底相同的数据建立新预订。
注意不须要签证。



实验2:
领域驱动的业务应用程序




这将启动一个新的旅行请求,该请求应该在Kogito旅行社的用户界面中直接显示。






使用应用程序UI或Swagger UI来处理几个旅行请求。



按Ctrl-C关闭应用程序。




保持Infinispan服务器正常运行。
在开发模式下再次启动应用程序。
请注意,旅行要求仍然存在。









用程序:


‍‍

kogito-travel-agency-1.0-SNAPSHOT-runner.jar是一个可执行的JAR文件。然而,它不是一个超级jar,由于依赖项被复制到target / lib目录中。react


[lab-user@workstation-rfd07 02-kogito-travel-agency]$  cp -r target/kogito-travel-agency-1.0-SNAPSHOT-runner.jar target/lib /tmp/kogito-travel-agencygit

[lab-user@workstation-rfd07 02-kogito-travel-agency]$github



将应用程序部署到OpenShift:docker



[lab-user@workstation-rfd07 02-kogito-travel-agency]$ oc start-build kogito-trav                                                                             el-agency --from-dir=/tmp/kogito-travel-agency -n kogitoapache

Uploading directory "/tmp/kogito-travel-agency" as binary input for the build ..                                                                             .json

...bootstrap

Uploading finishedcentos

build.build.openshift.io/kogito-travel-agency-1 startedruby


请注意,应用程序在大约15秒内启动。该pod占用大约300MB的内存。

使用应用程序UI或Swagger UI测试Kogito Travel Agency应用程序。服务器

构建Kogito Travel Agency应用程序的Linux 64位本机可执行文件:


mvn clean package -DskipTests=true -Pnative

这会在项目的目标文件夹中生成本机可执行文件kogito-travel-agency-1.0-SNAPSHOT-runner。请注意,此可执行文件仅在64位Linux上运行。本机编译可能须要5-10分

可选:在本地运行并测试应用程序。确保首先启动Infinispan docker镜像。

使用本机可执行文件构建Docker镜像。src / main / docker文件夹包含基于最小RHEL8 UBI映像的Docker文件。使用Podman构建Docker镜像:

[lab-user@workstation-rfd07 02-kogito-travel-agency]$  oc create route passthrough docker-registry-lab --service=docker-registry -n default

route.route.openshift.io/docker-registry-lab created

[lab-user@workstation-rfd07 02-kogito-travel-agency]$  export DOCKER_REGISTRY_HOSTNAME=$(oc get route docker-registry-lab -n default -o template --template='{{.spec.host}}')

[lab-user@workstation-rfd07 02-kogito-travel-agency]$  export TKN=`oc whoami -t`

[lab-user@workstation-rfd07 02-kogito-travel-agency]$  sudo podman login -u admin -p $TKN --tls-verify=false $DOCKER_REGISTRY_HOSTNAME

Login Succeeded!

[lab-user@workstation-rfd07 02-kogito-travel-agency]$  sudo podman tag kogito-travel-agency:0.0.1  $DOCKER_REGISTRY_HOSTNAME/openshift/kogito-travel-agency:0.0.1

[lab-user@workstation-rfd07 02-kogito-travel-agency]$  sudo podman push $DOCKER_REGISTRY_HOSTNAME/openshift/kogito-travel-agency:0.0.1 --tls-verify=false

Getting image source signatures

Copying blob 82e14c62ab02 done

Copying blob b6f081e4b2b6 done

Copying blob 731091ce83e9 done

Copying blob d8e1f35641ac done

Copying config e2e8238bf8 done

Writing manifest to image destination

Copying config e2e8238bf8 done

Writing manifest to image destination

Storing signatures

[lab-user@workstation-rfd07 02-kogito-travel-agency]$ oc login -u user1

Logged into "https://master00.example.com:443" as "user1" using existing credentials.


You have access to the following projects and can switch between them with 'oc project <projectname>':


    kafka-cluster

  * kogito

    monitoring


Using project "kogito".

[lab-user@workstation-rfd07 02-kogito-travel-agency]$  oc scale dc kogito-travel-agency --replicas=0 -n kogito

deploymentconfig.apps.openshift.io/kogito-travel-agency scaled

[lab-user@workstation-rfd07 02-kogito-travel-agency]$




02-kogito-travel-agency项目的openshift文件夹包含一个OpenShift模板文件,用于部署Kogito Travel Agency应用程序的原生版本。它描述了应用程序的DeploymentConfig,Service和Route。

查看kogito-travel-agency-native.yml模板文件。


DeploymentConfig指向咱们推送到OpenShift注册表的图像的图像流。


kogito-travel-agency ConfigMap安装在pod的/ work / config目录中。



[lab-user@workstation-rfd07 02-kogito-travel-agency]$ oc process -f openshift/kogito-travel-agency-s2i.yml | oc create -f - -n kogito

buildconfig.build.openshift.io/kogito-travel-agency-s2i created

imagestream.image.openshift.io/kogito-quarkus-ubi8-s2i created

imagestream.image.openshift.io/kogito-travel-agency-s2i created

[lab-user@workstation-rfd07 02-kogito-travel-agency]$ oc process -f openshift/kogito-travel-agency-runtime.yml | oc create -f - -n kogito


 Lab 4: Event Driven Kogito with Kafka

events是Kogito的一等公民。运行时根据给定请求的执行上下文发出事件。这些事件的主要目的是通知第三方流程实例及其数据的更改。为了不发送太多事件并优化生产者和消费者端,每一个流程实例只发出一个事件。该事件将包括相关信息,例如:


流程实例元数据进程id,进程实例id,进程实例状态等


已执行的节点实例,在执行期间已触发/离开的全部节点实例的列表


变量 - 执行后变量的当前状态


这些事件将提供正在执行的流程实例的完整视图。


事件格式遵循CloudEvents(https://cloudevents.io)规范。


默认状况下,仅在至少定义了发布者时才会发出事件。可能有许多事件发布者可用于将这些事件发送/发布到不一样的渠道等。


开箱即用的Kogito与一个使用Quarkus Reactive Messaging的事件发布者一块儿发布 - 它容许向Kafka,AMQP,MQTT,Camel发送事件。


事件的另外一个用例是流程实例之间的通讯。Kogito运行时中的BPMN消息事件节点发布和使用来自Kafka主题的消息。


在本实验中,您将探索Kogito与Kafka的整合。


在本实验中使用的Kogito Travel Agency应用程序版本中,事件发布机制已启用并配置为将事件发送到Kafka队列。


Kogito旅行预订流程定义已经扩展,每次旅行者须要申请签证时,都会将VisaApplication对象发送到Kafka主题。这是使用BPMN消息结束事件节点建模的,其中MessageEventDefinition对应于发送消息的Quarkus消息传递通道的名称。消息的有效负载(VisaApplication对象)是经过数据输入关联定义的。



第二个Kogito应用程序 -  Kogito Visas  - 具备流程定义,BPMN消息启动事件映射到相同的Kafka主题。对于从Kafka主题消耗的每条消息,将建立一个新的流程实例。

此版本的Kogito Travel Agency应用程序依赖于正在运行的Kafka群集。咱们能够启动本地容器化Kafka集群,但为了简单起见,咱们将使用本机映像将应用程序直接部署到OpenShift。


在本实验中,您能够选择在工做站节点上构建本机二进制文件和映像,仍是使用S2I构建。

[lab-user@workstation-rfd07 kogito-travel-agency-tutorial]$ cd 03-kogito-travel-agency

[lab-user@workstation-rfd07 03-kogito-travel-agency]$ oc create -f openshift/kafka-topics.yml -n kafka-cluster

kafkatopic.kafka.strimzi.io/visaapplications created

kafkatopic.kafka.strimzi.io/kogito-processinstances-events created

[lab-user@workstation-rfd07 03-kogito-travel-agency]$ oc new-project kogito2

Now using project "kogito2" on server "https://master00.example.com:443".


You can add applications to this project with the 'new-app' command. For example, try:


    oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git


to build a new example application in Ruby.

[lab-user@workstation-rfd07 03-kogito-travel-agency]$  oc adm policy add-role-to-user view -z default -n kogito2

role "view" added: "default"

[lab-user@workstation-rfd07 03-kogito-travel-agency]$ oc process -f openshift/infinispan-server.yml | oc create -f - -n kogito2

service/infinispan-server created

deployment.apps/infinispan-server created



pom.xml

org.kie.kogito:kogito-events-reactive-messaging-addon,io.quarkus:quarkus-kafka-client和io.quarkus:quarkus-smallrye-reactive-messaging-kafka,这是Kafka集成所必需的。



查看配置文件

[lab-user@workstation-rfd07 03-kogito-travel-agency]$ cat  src/main/resources/application.properties

# Configuration file

# key = value

quarkus.infinispan-client.server-list=localhost:11222


quarkus.swagger-ui.always-include=true


mp.messaging.outgoing.visaapplications.connector=smallrye-kafka

mp.messaging.outgoing.visaapplications.topic=visaapplications

mp.messaging.outgoing.visaapplications.value.serializer=org.acme.travels.json.VisaApplicationJsonbSerializer


mp.messaging.outgoing.kogito-processinstances-events.connector=smallrye-kafka

mp.messaging.outgoing.kogito-processinstances-events.topic=kogito-processinstances-events

mp.messaging.outgoing.kogito-processinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer[lab-user@workstation-rfd07 03-kogito-travel-agency]$




mp.messaging.outgoing条目将Quarkus传出通道映射到smallrye-kafka链接器以及visaapplications和kogito-processinstances-events主题。

[lab-user@workstation-rfd07 03-kogito-travel-agency]$ cat  /tmp/application.properties

quarkus.infinispan-client.server-list=infinispan-server.kogito2.svc:11222


mp.messaging.outgoing.visaapplications.bootstrap.servers=kafka-cluster-kafka-bootstrap.kafka-cluster.svc:9092


mp.messaging.outgoing.kogito-processinstances-events.bootstrap.servers=kafka-cluster-kafka-bootstrap.kafka-cluster.svc:9092


从application.properties文件建立ConfigMap:

[lab-user@workstation-rfd07 03-kogito-travel-agency]$ oc create configmap kogito-travel-agency --from-file=/tmp/application.properties -n kogito2

configmap/kogito-travel-agency created

‍‍‍

构建Kogito Travel Agency应用程序的Linux 64位本机可执行文件:


使用本机可执行文件构建Docker镜像。src / main / docker文件夹包含基于最小RHEL8 UBI映像的Docker文件。使用Podman构建Docker镜像。将图像标记为版本0.0.2以区别于上一个实验中的版本:

-

本文分享自微信公众号 - 大魏分享(david-share)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索