更多详细示例可直接访问 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 --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调用
项目根目录执行拉取到最新的框架依赖:- 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 技能
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |