Dubbo-go 範例

本文介紹如何使用 Dubbo-go 範例

為了方便 Dubbogo 框架使用者,我們提供了 Samples 儲存庫供使用者參考

[Dubbo-go-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 範例

  1. 透過 bash 指令快速啟動:透過簡單的命令列啟動範例和單元測試
  2. 在 IDE 中快速啟動,這也是建議的方式:在專案「.run」子目錄中,提供了所有範例的 GoLand 執行設定檔,因此使用者只需在 IDE 中點擊即可執行所有範例。
  3. 在 IDE 中手動設定並執行:為了完整性,以及如果您不使用 GoLand 而使用其他 IDE 的情況,這裡也提供了逐步的設定指南,以幫助使用者了解如何在 IDE 中進行設定,以執行或除錯 dubbo-go 範例。

2.1 透過命令列快速啟動

前提條件:需要準備好 docker 環境

以下我們將以「helloworld」為例

  1. 啟動註冊中心(例如 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
    
  2. 啟動服務提供者

    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
    
  3. 執行服務呼叫方

    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
    
  4. 整合測試 除了展示如何在 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
    
  5. 關閉和清理

    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 專案後,請按照以下步驟執行/除錯此範例

  1. 啟動 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.
    
  2. 啟動服務提供者

    開啟「helloworld/go-server/cmd/server.go」檔案,然後點擊左側邊欄中「main」函式旁的 ▶︎ 圖示,並從彈出選單中選擇「修改執行設定…」,並確保以下設定準確

    • 工作目錄:「helloworld/go-server」目錄的絕對路徑,例如:*`/home/dubbo-go-samples/helloworld/go-server`*
    • 環境變數:DUBBO_GO_CONFIG_PATH=”../conf/dubbogo.yml"

    這樣,範例中的伺服器就準備就緒,可以執行了。

  3. 執行服務消費者

    開啟「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 中從「執行」切換到「除錯」。如果要結束,直接點擊 ◼︎ 即可。


最後修改日期:2023 年 1 月 2 日:增強 Dubbogo 文件 (#1800) (71c8e722740)