golang使用grpc实现服务调用(一)
学习目标
- grpc 了解
- protobuf 了解
老样子 首先日常三问:
3. 什么是grpc?
在官方文档也有什么一句提问:(Why gRPC?)
以下是官方做的解释:
gRPC is a modern open source high performance Remote
Procedure Call (RPC) framework that can run in any
environment. It can efficiently connect services in and
across data centers with pluggable support for load
balancing, tracing, health checking and authentication.
It is also applicable in last mile of distributed computing
to connect devices, mobile applications and browsers to backend services.
翻译过来就是:gRPC 是一种现代开源高性能远程过程调用 (RPC) 框架,可以在任何环境中运行。它可以通过对负载平衡、跟踪、健康检查和身份验证的可插拔支持,有效地连接数据中心内和数据中心之间的服务。它还适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务
4. grpc 应用场景
- 在微服务风格架构中高效连接多语言服务
- 将移动设备、浏览器客户端连接到后端服务
- 生成高效的客户端库
3 . grpc优势
- 10 种语言的惯用客户端库
- 在线上高效且具有简单的服务定义框架
- 使用基于 http/2 的传输进行双向流传输
- 可插拔身份验证、跟踪、负载平衡和健康检查
以上是对grpc的介绍以及应用场景和优势(来自官方阐述);
protobuf:
protobuf 是我们rpc 当中数结构数据的系列化,可以看做是json,但是在数据量大的情况下protobuf 比json要更加高效,
这是一个调用执行图:
这里故意画的服务端比客户端多,为了更好体现微服务多副本
那么接下来我们需要安装proto 为我们生成对应的代码
go install github.com/golang/protobuf/proto
go install github.com/golang/protobuf/protoc-gen-go
// 生成代码
// 输出当前目录 xx.proto为自己编写的proto文件
protoc --go_out=. xx.proto
- 这个时候环境安装好后 我们来尝试编写proto文件
syntax = "proto3"; //proto协议
package proto; //包名
option go_package = "./"; // 当前目录
import "google/protobuf/timestamp.proto"; // 使用时间类型 额外引入timestamp
// message 消息体
message RequestUser{
string Username = 1; // string 为类型,Username为结构体字段, 1 不是值 而是编号 不能出现同一个
string Password =2;
int32 Code = 3;
}
// 返回消息体
message LoginResponse{
string Token = 1;
}
// 服务名称
service UserService{
rpc LoginUser(RequestUser) returns(LoginResponse);
}
- 生成代码
protoc --go_out=. user.proto
这个时候同一级目录会生成user.pb.go 部分内容是这样的
大家一定有个疑问! 怎么不是写go代码 而是介绍protobuf, 这里说明一下,protobuf 是rpc中最基础的也是必须要会编写的,所以这篇先介绍protobuf! 最后给大家留个作业,时间类型介绍了正常类型也介绍了,那么数组呢?这里把数组的语法留给大家!!!
期待后续 大家一起学习!!!!!!