Dubbo-go 範例
為了方便 Dubbogo 框架使用者,我們提供了 Samples 儲存庫供使用者參考
1. Samples 儲存庫包含的範例
- config-api: 使用 API 進行設定初始化
- configcenter: 使用不同的設定中心,目前支援三種:zookeeper、apollo 和 nacos
- context: 如何使用 context 傳遞附件
- direct: 直接連線模式
- game: 遊戲服務範例
- generic: 泛化呼叫
- rpc: RPC 呼叫範例,包含 Triple、Dubbo 等協定以及跨語言/gRPC 互通性範例
- helloworld: RPC 呼叫入門範例
- logger: 日誌範例
- registry: 展示與不同註冊中心的對接,包含 zk、nacos、etcd
- metrics: 資料回報
- filter: 使用提供的過濾器和自定義過濾器的範例
- registry/servicediscovery: 應用層級服務發現範例
- router: 路由範例
- tracing: 鏈路追蹤範例
2. 如何執行
目前有三種方式可以執行 dubbo-go 範例
- 透過 bash 指令快速啟動:透過簡單的命令列啟動範例和單元測試
- 在 IDE 中快速啟動,這也是建議的方式:在專案「.run」子目錄中,提供了所有範例的 GoLand 執行設定檔,因此使用者只需在 IDE 中點擊即可執行所有範例。
- 在 IDE 中手動設定並執行:為了完整性,以及如果您不使用 GoLand 而使用其他 IDE 的情況,這裡也提供了逐步的設定指南,以幫助使用者了解如何在 IDE 中進行設定,以執行或除錯 dubbo-go 範例。
2.1 透過命令列快速啟動
前提條件:需要準備好 docker 環境
以下我們將以「helloworld」為例
啟動註冊中心(例如 zookeeper)
make -f build/Makefile docker-up
當您看到類似以下的輸出時,表示 zookeeper 伺服器已準備好啟動。
> Starting dependency services with ./integrate_test/dockercompose/docker-compose.yml Docker Compose is now in the Docker CLI, try `docker compose up` Creating network "dockercompose_default" with the default driver Creating dockercompose_zookeeper_1... done Creating etcd... done Creating nacos-standalone... done
如果您想停止註冊中心,可以透過執行以下指令來完成
make -f build/Makefile docker-down
啟動服務提供者
cd helloworld/go-server/cmd export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yml" go run .
當您看到類似以下的輸出時,服務提供者已準備好啟動。
2021/10/27 00:33:10 Connected to 127.0.0.1:2181 2021/10/27 00:33:10 Authenticated: id=72057926938066944, timeout=10000 2021/10/27 00:33:10 Re-submitting `0` credentials after reconnect
執行服務呼叫方
cd helloworld/go-client/cmd export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yml" go run .
當輸出以下資訊時,表示
go-client
成功呼叫了go-server
。2021-10-27T00:40:44.879+0800 DEBUG triple/dubbo3_client.go:106 TripleClient.Invoke: get reply = name:"Hello laurence" id:"12345" age:21 2021-10-27T00:40:44.879+0800 DEBUG proxy/proxy.go:218 [makeDubboCallProxy] result: name:"Hello laurence" id:"12345" age:21 , err: <nil> 2021-10-27T00:40:44.879+0800 INFO cmd/client.go:51 client response result: name:"Hello laurence" id:"12345" age:21
整合測試 除了展示如何在 dubbo-go 中使用函式和功能外,這個 dubbo-go-samples 專案也用於 apache/dubbo-go 的整合測試。 為
go-server
設計的整合測試可以按如下方式執行先啟動伺服器
cd helloworld/go-server/cmd export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yml" go run .
然後切換到單元測試目錄,設定環境變數,然後執行單元測試
cd integrate_test/helloworld/tests/integration export DUBBO_GO_CONFIG_PATH="../../../../helloworld/go-client/conf/dubbogo.yml" go test -v
當輸出以下資訊時,表示整合測試已通過。
> Running integration test for application go-server ... --- PASS: TestSayHello (0.01s) PASS ok github.com/apache/dubbo-go-samples/integrate_test/helloworld/tests/integration0.119s
關閉和清理
make -f build/Makefile clean docker-down
*以下兩種操作模式與 IDE 相關。這裡我們以 Intellij GoLand 為例進行說明。*
2.2 在 IDE 中快速啟動
在 GoLand 中開啟此專案後,您會發現在「執行設定」彈出選單中,已經有一系列預先設定好的選項,用於執行相關的服務提供者和呼叫方,例如:「helloworld-go-server」和「helloworld-go-client」。
您可以選擇任何這些快速啟動相關的範例。當然,在執行之前,假設所需的註冊中心已經事先啟動,否則用例將會失敗。您可以選擇手動啟動它,或者使用專案中提供的「docker-compose.yml」來啟動註冊中心的 Docker 容器。
2.3. 在 IDE 中手動執行
這裡以 *Intellij GoLand* 為例。在 GoLand 中開啟 dubbo-go-samples 專案後,請按照以下步驟執行/除錯此範例
啟動 ZooKeeper 伺服器
開啟「integrate_test/dockercompose/docker-compose.yml」檔案,然後點擊編輯器左側邊欄的 ▶︎▶︎ 圖示執行,此時應該會彈出「服務」標籤頁,並輸出類似以下的文字訊息
Deploying 'Compose: docker'... /usr/local/bin/docker-compose -f ...integrate_test/dockercompose/docker-compose.yml up -d Creating network "docker_default" with the default driver Creating docker_zookeeper_1... 'Compose: docker' has been deployed successfully.
啟動服務提供者
開啟「helloworld/go-server/cmd/server.go」檔案,然後點擊左側邊欄中「main」函式旁的 ▶︎ 圖示,並從彈出選單中選擇「修改執行設定…」,並確保以下設定準確
- 工作目錄:「helloworld/go-server」目錄的絕對路徑,例如:*`/home/dubbo-go-samples/helloworld/go-server`*
- 環境變數:DUBBO_GO_CONFIG_PATH=”../conf/dubbogo.yml"
這樣,範例中的伺服器就準備就緒,可以執行了。
執行服務消費者
開啟「helloworld/go-client/cmd/client.go」檔案,然後點擊左側邊欄中「main」函式旁的 ▶︎ 圖示,然後選擇「修改執行設定…」,並確保以下設定準確
- 工作目錄:「helloworld/go-client」目錄的絕對路徑,例如:*`/home/dubbo-go-samples/helloworld/go-client`*
- 環境變數:DUBBO_GO_CONFIG_PATH=”../conf/dubbogo.yml”
然後您就可以執行並呼叫遠端服務了。如果呼叫成功,將會有以下輸出
[2021-02-03/16:19:30 main.main: client.go: 66] response result: &{A001 Alex Stocks 18 2020-02-04 16:19:30.422 +0800 CST}
如果您需要除錯此範例或 dubbo-go 框架,可以在 IDE 中從「執行」切換到「除錯」。如果要結束,直接點擊 ◼︎ 即可。