golang 源碼分析:uber-cadence(1)
下我們先體驗下如何使用然後分析下例子的源碼。首先我們使用默認的配置,採用 docker-compose 啓動 server 端
% cd cadence/docker
% docker-compose up
Creating network "docker_default" with the default driver
Pulling cassandra (cassandra:3.11)...
3.11: Pulling from library/cassandra
Pulling node-exporter (prom/node-exporter:)...
latest: Pulling from prom/node-exporter
Pulling cadence (ubercadence/server:master-auto-setup)...
master-auto-setup: Pulling from ubercadence/server
Pulling cadence-web (ubercadence/web:latest)...
latest: Pulling from ubercadence/web
當然,如果希望後端存儲是 mysql 可以使用
%docker-compose -f docker-compose-mysql.yml up
然後我們就可以查看後臺,因爲沒有起任何任務所以什麼都沒有
http://localhost:8088/news/2021/02/25/cadence-go-0-16-0
然後查看監控
http://localhost:3000/d/1B0efRyGy2/cadence-client-basic?orgId=1
我們可以下載官方的樣例任務來進行學習 github.com/uber-common/cadence-samples,下載下來後 make
% make
go build -o bin/helloworld cmd/samples/recipes/helloworld/*.go
直接執行會報域名找不到的錯誤,因爲我們沒有創建域名
% ./bin/helloworld -m worker
2023-06-03T18:09:09.692+0800 INFO common/sample_helper.go:111 Logger created.
2023-06-03T18:09:09.692+0800 DEBUG common/factory.go:162 Creating RPC dispatcher outbound {"ServiceName": "cadence-frontend", "HostPort": "127.0.0.1:7833"}
2023-06-03T18:09:09.753+0800 INFO common/sample_helper.go:162 Domain doesn't exist {"Domain": "samples-domain", "error": "EntityNotExistsError{Message: Domain samples-domain does not exist., CurrentCluster: , ActiveCluster: }"}
2023-06-03T18:09:09.819+0800 ERROR internal/internal_worker.go:254 domain does not exist
到 cadence 目錄下執行
% git submodule update --init
子模組 'idls'(https://github.com/uber/cadence-idl.git)已對路徑 'idls' 註冊
正克隆到 'cadence/idls'...
% make tools
Makefile:41: Caution: you are not using CI's go version. Expected: go1.17, current: go version go1.19 darwin/amd64
make: Nothing to be done for `tools'.
我們改下 Makefile 裏的 golang 版本
% vi cadence/Makefile
EXPECTED_GO_VERSION := go1.17
EXPECTED_GO_VERSION := go1.19
然後編譯
% make tools
make: Nothing to be done for `tools'.
% make bins
compiling cadence-server with OS: darwin, ARCH: amd64
註冊我們的域名 samples-domain
% ./cadence --domain samples-domain domain register
Domain samples-domain successfully registered.
查看下
% ./cadence --domain samples-domain domain describe
Name: samples-domain
UUID: 8910febf-d84a-460d-a5a8-63b0754ebd7c
Description:
OwnerEmail:
DomainData: map[]
Status: REGISTERED
RetentionInDays: 3
EmitMetrics: true
IsGlobal(XDC)Domain: true
ActiveClusterName: cluster0
Clusters: [cluster0]
HistoryArchivalStatus: DISABLED
VisibilityArchivalStatus: DISABLED
指定任務列表運行一下
% ./cadence --domain samples-domain workflow run --tl helloWorldGroup --wt main.Workflow --et 60 -i '"cadence"'
Running execution:
Workflow Id : 4ff92e57-6c35-43a6-975a-b0f16f25283d
Run Id : e5119817-814c-480f-a9bb-abf58571afc1
Type : main.Workflow
Domain : samples-domain
Task List : helloWorldGroup
Args : "cadence"
Progress:
1, 2023-06-03T19:43:15+08:00, WorkflowExecutionStarted
Time elapse: 8s
其中參數解釋如下:
Tasklist name (--tl) 任務列表
Workflow type (--wt)
Execution start to close timeout in seconds (--et)
Input in JSON format (--i) (optional)
也可以啓動官方例子裏的 worker
% ./bin/helloworld -m worker
2023-06-03T19:44:54.468+0800 INFO common/sample_helper.go:111 Logger created.
2023-06-03T19:44:54.469+0800 DEBUG common/factory.go:162 Creating RPC dispatcher outbound {"ServiceName": "cadence-frontend", "HostPort": "127.0.0.1:7833"}
2023-06-03T19:44:54.503+0800 INFO common/sample_helper.go:164 Domain successfully registered. {"Domain": "samples-domain"}
2023-06-03T19:44:54.589+0800 INFO internal/internal_worker.go:834 Started Workflow Worker {"Domain": "samples-domain", "TaskList": "helloWorldGroup", "WorkerID": "36869@xiazemindeMacBook-Pro.local@helloWorldGroup@f06a06ee-786b-405f-8932-d48340666531"}
2023-06-03T19:44:54.664+0800 INFO internal/internal_worker.go:859 Started Activity Worker {"Domain": "samples-domain", "TaskList": "helloWorldGroup", "WorkerID": "36869@xiazemindeMacBook-Pro.local@helloWorldGroup@f06a06ee-786b-405f-8932-d48340666531"}
或者直接 trigger 下
% ./bin/helloworld -m trigger
2023-06-03T19:49:19.128+0800 INFO common/sample_helper.go:111 Logger created.
2023-06-03T19:49:19.128+0800 DEBUG common/factory.go:162 Creating RPC dispatcher outbound {"ServiceName": "cadence-frontend", "HostPort": "127.0.0.1:7833"}
2023-06-03T19:49:19.148+0800 INFO common/sample_helper.go:164 Domain successfully registered. {"Domain": "samples-domain"}
2023-06-03T19:49:19.208+0800 INFO common/sample_helper.go:198 Started Workflow {"WorkflowID": "helloworld_45fcb8f4-6556-448a-ac8c-86386bbf4ff9", "RunID": "d0576e1d-3d8d-46e8-8126-042378b98427"}
官方例子還有很多就不一一列舉了,然後我們到後臺就可以看到如下界面了:
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/9jRx2QZt6efWajJK4TNLPA