完成 RPC 调用

1. 生成 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

您可以看到生成的项目包含一个客户端项目和一个服务器项目,以及相关的配置文件。

1.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 方法和流式 RPC 方法。

1.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 文件后,再次执行命令生成即可覆盖。

2. 发起 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

成功获取调用结果

3. 更多

细心的读者可以发现,上面例子中编写的服务器可以接受客户端发起的普通 RPC 和流式 RPC 调用请求。目前只编写了普通调用的 Client,读者可以尝试根据 samples 库中的例子编写流式客户端和服务器。


上次修改时间:2023 年 1 月 2 日:增强 Dubbogo 文档 (#1800) (71c8e722740)