
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源创计划”,欢迎正在阅读的你也加入,一块儿分享。