構建業務的流程自動化






酒店預訂和航班預訂功能做爲私人子流程實施



這些流程稱爲酒店預訂服務和航班預訂服務,它們都是做爲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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索