gRPC 在 Golang 实践 - 入门
gRPC 作为一个开源 RPC 框架,而且有 Google 背书也可谓是有深厚的背景,gRPC 采用 protocol buffers 作为 IDL,并且支持多语言跨平台运行,官方支持 C++,C#,Golang,Python 等10种语言,并且都提供了对于语言较为详细的接入文档,所以在使用上也是十分便捷的。本文将以 Golang 为例来介绍 gRPC 的快速入门使用。
准备
所谓准备,就是要安装所有相关的环境和库,首先是 Golang (这是一句废话),但是要注意的一点是现在最新的 gRPC 要运行在 Golang v1.6 以上。
然后就是安装 gRPC,可以通过下面命令进行安装:
go get -u google.golang.org/grpc
接下要安装 Protocol Buffers,这里包含两部分,第一部分就是安装 protobuf 的编译器,方式很简单,下载地址如下:
https://github.com/google/protobuf/releases
选择合适自己的压缩包进行下载,比如我这里下载了适合
macos平台的压缩包:protoc-3.5.1-osx-x86_64.zip解压这个压缩包:
unzip protoc-3.5.1-osx-x86_64.zip将解压后
bin/protoc移动到 PATH 环境变量下面,比如/usr/local/bin,将include文件夹下的内容移动到/usr/local/includes下即可可以运行
protoc --help查看编译器运行帮助
另一部分是要安装编译器的适用 Golang 的插件,安装方式如下:
go get -u github.com/golang/protobuf/protoc-gen-go
至此运行环境准备完毕。
定义服务
前面提到过,gRPC 采用 Protocol Buffers 来定义服务,这里可以先假设一个场景:“服务端提供一个 Version 的接口来获取服务的版本”,下面就是通过 Protocol Buffers 定义这个服务。
1 | // 定义服务接口 |
上面的 Protobuf 定义了一个RPC服务 DemoService,包含一个接口 Version,这个接口接受 name 字段,返回 version 字段。
接下来,我们就要使用 Protobuf 的编译器生成 gRPC 的代码,这里就用到了我们之前安装的 protoc 工具,执行以下命令:
protoc --go_out=plugins=grpc:pb ./pb/demo_service.proto
上述命令中 --go_out=plugins=grpc:pb 定义了编译完成后输出的代码位置为 pb 目录,./pb/demo_service.proto 为需要编译的 proto 文件。生成的代码文件就不在这里展示了,里面就是定义了一些接口和结构体。
服务端程序
服务端程序就是启动一个gRPC服务器,直接上代码:
1 | package main |
以上代码启动了一个服务器并监听8888端口,这里面主要的就是要定义一个结构体,上一步通过 Protobuf 生成的代码中会有一个 interface,里面包含 Version 方法,这里定义的结构体需要实现这个接口,这个服务才可以被注册。
客户端程序
有了服务的程序,下面我们编写一个客户端程序来连接到服务端进行通信。
1 | package main |
上面的代码创建了一个客户端程序,并且连接到服务器,然后调用了 Version 接口获取信息。
小结
以上为 gRPC 的使用的快速入门,包括使用 Protobuf 来定义RPC服务,然后通过编译器生成 gRPC代码,再然后编写服务端和客户端来实现通信。之后会再真的gRPC使用的一些细节和场景进行介绍。
- 本文标题:gRPC 在 Golang 实践 - 入门
- 本文作者:kenticny
- 创建时间:2017-11-14 22:17:45
- 本文链接:https://luyun.io/2017/11/14/grpc-golang-practice-01/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!