dubbo-go 3.0 示例倉(cāng)庫(kù)

2022-04-14 15:19 更新

為了方便 Dubbo-go 框架用戶的使用,我們提供了 Samples 倉(cāng)庫(kù)以供用戶參考:

【Dubbo-go-samples 倉(cāng)庫(kù)地址】

1. Samples 倉(cāng)庫(kù)包含的例子

  • config-api: 使用 API 進(jìn)行配置初始化
  • configcenter: 使用不同的配置中心,目前支持三種:zookeeper、apollo、和 nacos
  • context: 如何使用上下文傳遞 attachment
  • direct: 直連模式
  • game: 游戲服務(wù)例子
  • generic: 泛化調(diào)用
  • rpc: RPC 調(diào)用例子, 包含 Triple、Dubbo等協(xié)議以及跨語(yǔ)言/gRPC互通示例
  • helloworld: RPC調(diào)用入門(mén)例子
  • logger: 日志例子
  • registry: 展示與不同注冊(cè)中心的對(duì)接,包含了 zk、nacos、etcd
  • metrics: 數(shù)據(jù)上報(bào)
  • filter: 使用提供filter和自定義filter的例子
  • registry/servicediscovery:應(yīng)用級(jí)服務(wù)發(fā)現(xiàn)例子
  • router: 路由例子
  • tracing: 鏈路追蹤例子

2. 如何運(yùn)行

目前有三種方式來(lái)運(yùn)行 dubbo-go 的示例:

  1. 通過(guò) bash 命令快速開(kāi)始: 通過(guò)簡(jiǎn)單的命令行啟動(dòng)樣例以及進(jìn)行單元測(cè)試
  2. 在 IDE 中快速開(kāi)始,這也是推薦的方式: 在工程 “.run” 子目錄下,提供了所有示例的 GoLand 運(yùn)行配置文件,因此用戶可以簡(jiǎn)單在 IDE 中單擊運(yùn)行所有的示例。
  3. 在 IDE 中手工配置并運(yùn)行: 為了完整性的目的,也為了萬(wàn)一您不使用 GoLand 而使用其他的 IDE,這里也提供了如何一步一步的配置的指南,幫助用戶理解如何在 IDE 中配置,運(yùn)行或者調(diào)試 dubbo-go 的示例。

2.1 通過(guò) 命令行 快速開(kāi)始

前置條件:需要 docker 環(huán)境就緒

下面我們將使用 “helloworld” 作為示例:

  1. 啟動(dòng)注冊(cè)中心(比如 zookeeper)
    make -f build/Makefile docker-up 
    

    當(dāng)看到類似下面的輸出信息時(shí),就表明 zookeeper server 啟動(dòng)就緒了。

    >  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
    

    如果要停掉注冊(cè)中心,可以通過(guò)運(yùn)行以下的命令完成:

    make -f build/Makefile docker-down
  2. 啟動(dòng)服務(wù)提供方
    cd helloworld/go-server/cmd
    export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yml"
    go run .
    

    當(dāng)看到類似下面的輸出信息時(shí),就表明服務(wù)提供方啟動(dòng)就緒了。

    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. 運(yùn)行服務(wù)調(diào)用方
    cd helloworld/go-client/cmd
    export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yml"
    go run .
    當(dāng)以下的信息輸出時(shí),說(shuō)明 go-client 調(diào)用 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. 集成測(cè)試 

     本項(xiàng)目 dubbo-go-samples 除了用來(lái)展示如何使用 dubbo-go 中的功能和特性之外,還被用于 apache/dubbo-go 的集成測(cè)試??梢园凑找韵碌牟襟E來(lái)運(yùn)行針對(duì) go-server 設(shè)計(jì)的集成測(cè)試:

    首先啟動(dòng)服務(wù)方

    cd helloworld/go-server/cmd
    export DUBBO_GO_CONFIG_PATH="../conf/dubbogo.yml"
    go run .
    

    然后切換到單測(cè)目錄, 設(shè)置環(huán)境變量,然后執(zhí)行單測(cè)

    cd integrate_test/helloworld/tests/integration
    export DUBBO_GO_CONFIG_PATH="../../../../helloworld/go-client/conf/dubbogo.yml"
    go test -v
    

    當(dāng)以下信息輸出時(shí),說(shuō)明集成測(cè)試通過(guò)。

    >  Running integration test for application go-server
    ...
    --- PASS: TestSayHello (0.01s)
    PASS
    ok      github.com/apache/dubbo-go-samples/integrate_test/helloworld/tests/integration  0.119s
  5. 關(guān)閉并清理
    make -f build/Makefile clean docker-down

以下的兩種運(yùn)行方式都與 IDE 有關(guān)。這里我們以 Intellij GoLand 為例來(lái)討論。

2.2 在 IDE 中快速開(kāi)始

一旦在 GoLand 中打開(kāi)本項(xiàng)目,可以發(fā)現(xiàn),在 “Run Configuration” 彈出菜單中已經(jīng)存在了一系列事先配置好了的用來(lái)運(yùn)行相關(guān)服務(wù)提供方和調(diào)用方的選項(xiàng),例如:“helloworld-go-server” 和 “helloworld-go-client”。

可以選擇其中的任意一個(gè)快速啟動(dòng)相關(guān)示例。當(dāng)然在運(yùn)行之前,假設(shè)需要的注冊(cè)中心已經(jīng)事先啟動(dòng)了,不然用例將會(huì)失敗。您可以選擇手動(dòng)自行啟動(dòng)的方式,也可以利用工程中提供的 “docker-compose.yml” 在啟動(dòng)注冊(cè)中心的 docker 實(shí)例。選擇后者的話,可以參考第三種方式中的細(xì)節(jié)。

2.3.在 IDE 中手工運(yùn)行

這里以 Intellij GoLand 為例。在 GoLand 中打開(kāi) dubbo-go-samples 工程之后,按照以下的步驟來(lái)運(yùn)行/調(diào)試本示例:

  1. 啟動(dòng) zookeeper 服務(wù)器打開(kāi) “integrate_test/dockercompose/docker-compose.yml” 這個(gè)文件,然后點(diǎn)擊位于編輯器左邊 gutter 欄位中的 ???? 圖標(biāo)運(yùn)行,“Service” Tab 應(yīng)當(dāng)會(huì)彈出并輸出類似下面的文本信息:
    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. 啟動(dòng)服務(wù)提供方打開(kāi) “helloworld/go-server/cmd/server.go” 文件,然后點(diǎn)擊左邊 gutter 欄位中緊挨著 “main” 函數(shù)的 ?? 圖標(biāo),并從彈出的菜單中選擇 “Modify Run Configuration…",并確保以下配置的準(zhǔn)確:
    Working Directory: “helloworld/go-server” 目錄的絕對(duì)路徑,比如: /home/dubbo-go-samples/helloworld/go-server
    Environment: DUBBO_GO_CONFIG_PATH=”../conf/dubbogo.yml"
    這樣示例中的服務(wù)端就準(zhǔn)備就緒,隨時(shí)可以運(yùn)行了。
  3. 運(yùn)行服務(wù)消費(fèi)方打開(kāi) “helloworld/go-client/cmd/client.go” 這個(gè)文件,然后從左邊 gutter 欄位中點(diǎn)擊緊挨著 “main” 函數(shù)的 ?? 圖標(biāo),然后從彈出的菜單中選擇 “Modify Run Configuration…",并確保以下配置的準(zhǔn)確:
    Working Directory: “helloworld/go-client” 目錄的絕對(duì)路徑,比如: /home/dubbo-go-samples/helloworld/go-client
    Environment: DUBBO_GO_CONFIG_PATH=”../conf/dubbogo.yml"
    然后就可以運(yùn)行并調(diào)用遠(yuǎn)端的服務(wù)了,如果調(diào)用成功,將會(huì)有以下的輸出:
    [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}

如果需要調(diào)試該示例或者 dubbo-go 框架,可以在 IDE 中從 “Run” 切換到 “Debug”。如果要結(jié)束的話,直接點(diǎn)擊 ?? 就好了。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)