更多具体示例可间接拜访 Dubbo 官网 或搜寻关注官网微信公众号:Apache Dubbo

1. 装置Go语言环境

倡议应用最新版 go 1.17

go version >= go 1.15

【Go 语言官网下载地址】

将 $GOPATH/bin 退出环境变量

2. 装置序列化工具protoc

【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 --versionlibprotoc 3.14.0$ protoc-gen-go --versionprotoc-gen-go v1.26.0$ protoc-gen-go-triple --versionprotoc-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 greetingsmessage 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 helloworldgo 1.17require (    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 技能