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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。