更多详细示例可直接访问 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调用

项目根目录执行

$ 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 技能

最新文章

  1. 2.7我们的第一个Java程序
  2. Backbone事件模块及其用法
  3. 【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中
  4. [New Portal]Windows Azure Virtual Machine (10) 自定义Windows Azure Virtual Machine模板
  5. HDU 1707 简单模拟 Spring-outing Decision
  6. Spark源码分析(二)-SparkContext创建
  7. Windows编写bat执行文件
  8. redis基本数据类型【1】-String类型
  9. php通过文件头检测文件类型通用类(zip,rar…)(转)
  10. Redis的AOF功能
  11. Sybase datetime 时间转换格式 convert(varchar(10),字段名,转换格式)
  12. 一个发送邮件的C++库–jwsmtp
  13. Linq 查询与普通查询的区别
  14. windows的bat脚本
  15. JavaSE(七)之内部类
  16. 自学Python4.1-文件操作
  17. Nginx学习笔记3--Nginx和PHP(fastCGI)的配置和优化
  18. IDEA中MAVEN项目Dependency not found 问题
  19. vue之router钩子函数
  20. git基本操作及上传代码到gitHub

热门文章

  1. Dockerfile文件:设置变量启动的时候传递进去
  2. Elasticsearch Top10 监控指标
  3. .NET6 JWT(生成Token令牌)
  4. Java 读写锁 ReadWriteLock 原理与应用场景详解
  5. aardio + PowerShell 可视化快速开发独立 EXE 桌面程序
  6. 用 VS Code 搞Qt6:使用 PySide 6
  7. 使用Pytorch进行多卡训练
  8. java.lang.Object类与equals()及toString()的使用
  9. PHP redis有序集合实现分页
  10. 云计算_Apache CloudStack