作者:陳昌浩 1 導讀 if…else…在代碼中經常使用,聽說可以通過Java 8的Function介面來消滅if…else…!Function介面是什麼?如果通過Function介面介面消滅if…else…呢?讓我們一起來探索一下吧。 2 Function介面 Function介面就是一個有且僅有 ...
更多詳細示例可直接訪問 Dubbo 官網 或搜索關註官方微信公眾號:Apache Dubbo
1. 安裝Go語言環境
建議使用最新版 go 1.17
go version >= go 1.15
將 $GOPATH/bin 加入環境變數
2. 安裝序列化工具protoc
3. 安裝 dubbogo-cli 以及相關插件
執行以下指令安裝dubbogo-cli 至 $GOPATH/bin
$ export GOPROXY="https://goproxy.cn"
$ go install github.com/dubbogo/dubbogo-cli@latest
$ dubbogo-cli
hello
安裝依賴的工具插件
$ dubbogo-cli install all
確保上述安裝的工具位於在系統環境變數內
$ protoc --version
libprotoc 3.14.0
$ protoc-gen-go --version
protoc-gen-go v1.26.0
$ protoc-gen-go-triple --version
protoc-gen-go-triple 1.0.8
4. 生成 Demo 項目
使用安裝好的 dubbogo-cli 工具,創建demo工程。
$ mkdir quickstart
$ cd quickstart
$ dubbogo-cli newDemo .
$ tree .
.
├── api
│ ├── samples_api.pb.go
│ ├── samples_api.proto
│ └── samples_api_triple.pb.go
├── go-client
│ ├── cmd
│ │ └── client.go
│ └── conf
│ └── dubbogo.yaml
├── go-server
│ ├── cmd
│ │ └── server.go
│ └── conf
│ └── dubbogo.yaml
└── go.mod
可看到生成的項目中包含一個 client 項目和一個 server 項目,以及相關的配置文件。
4.1 查看介面描述文件 helloworld.proto
syntax = "proto3";
package api;
option go_package = "./;api";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (User) {}
// Sends a greeting via stream
rpc SayHelloStream (stream HelloRequest) returns (stream User) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message User {
string name = 1;
string id = 2;
int32 age = 3;
}
demo項目中,預設生成了一個介面描述文件,介面服務名為 api.Greeter, 包含兩個 RPC 方法,入參為 HelloRequest,返回值為 User,兩個方法分別為普通 RPC 方法和 Streaming 類型 RPC 方法。
4.2 (*可選) 使用安裝好的編譯工具編譯 pb 介面
$ cd api
$ protoc --go_out=. --go-triple_out=. ./samples_api.proto
參數意義:--go_out=.
使用上述安裝的 protoc-gen-go
插件,生成文件到當前目錄,--go-triple_out=.
使用上述安裝的 protoc-gen-go-triple
插件,生成文件到當前目錄。
執行該指令後,會生成兩個文件,分別是helloworld.pb (包含 proto 結構) 和 helloworld_triple.pb.go (包含 triple 協議介面)。
在 demo 工程中,預先生成好了這兩個文件,修改 .proto 文件後重新執行命令生成,即可覆蓋。
5. 開啟一次RPC調用
項目根目錄執行
$ go mod tidy
拉取到最新的框架依賴:
module helloworld
go 1.17
require (
dubbo.apache.org/dubbo-go/v3 v3.0.1
github.com/dubbogo/grpc-go v1.42.9
github.com/dubbogo/triple v1.1.8
google.golang.org/protobuf v1.27.1
)
require (
...
)
先後啟動服務端和客戶端: 開啟兩個終端,在 go-server/cmd 和 go-client/cmd 文件夾下分別執行 go run .
, 可在客戶端看到輸出:
client response result: name:"Hello laurence" id:"12345" age:21
獲得調用結果成功
6. 更多
細心的讀者可以發現,以上例子編寫的的服務端可以接受來自客戶端的普通RPC、流式RPC調用請求。目前只編寫了普通調用的Client,讀者可以根據 samples 庫中的例子來嘗試編寫流式客戶端和服務端。
更多samples可以參閱 dubbo-go-samples
搜索關註官方微信公眾號:Apache Dubbo,瞭解更多業界最新動態,掌握大廠面試必備 Dubbo 技能