这是我参与「第五届青训营 」伴学笔记创作活动的第8天
前言
笔者最近尝试做go的微服务项目,希望用grpc在各个服务间进行通信,因此学习了grpc的简单使用,此篇文章作为笔者学习grpc的笔记供之后深入学习和回顾使用,感兴趣的朋友也可以做参考。
grpc简介
什么是rpc
rpc全称Remote Procedure Call Protocol,中文名远程过程调用协议。说简单点客户端可以不关心细节调用远程服务上的某些对象,就像调用本地项目上的一个包中的对象一样。不过rpc是一种协议,也就是一套规范,所以才只需要遵循规范不关心细节。
为什么要用rpc
说简单点就是为了满足需求。
早在以前数据库是用的单机数据库、应用使用的简单架构。随着应用功能越来越复杂、业务越来越多、用户访问量剧增,单机性能无法满足需求,就有了微服务架构、分布式集群等。
不过这又产生了新问题,微服务(机器)与微服务(机器)之间需要通信,这时候就需要可以在应用程序之间高效通信的手段,rpc就出现了(为了满足需求)。
grpc
rpc框架能够实现微服务、分布式这种结构之间通信的,grpc就是使用go语言开发的rpc框架。
grpc的服务支持多种常用的语言,如java、c++、go、python等。
grpc的安装即简单使用
安装
笔者使用的go语言,这里安装支持go的grpc,终端或控制台运行下面命令即可
go get -u google.golang.org/grpc
这里需要下载protobuf来运行一些proto命令,选择win64的下载解压即可。
[下载地址](Releases · protocolbuffers/protobuf (github.com))
关于protobuf可参考ProtoBuf介绍及应用_小小蚂蚁fcy的博客-CSDN博客_protobuf应用场景这篇文章。
解压完成之后需要配置一下环境变量,在系统环境变量path里面添加一个解压后文件里面bin文件的绝对路径即可。
简单使用
安装完环境之后,我们就可以进行使用了。
这里创建两个包模拟服务端和客户端,每个包里面有个独立的main.go文件,proto包用来放proto文件。使用grpc和protobuf需要对proto文件进行编写,编写完后运行proto命令即可生成无关语言的可以在服务间进行通信的接口。
编写proto文件
其实对proto文件的编写就是遵循一些规范。
syntax="proto3";//这里使用的proto3
option go_package="./;proto";//代表在proto包的当前目录下生成
package services;
//这是接口期望的请求数据格式
message helloRequest{
string name=1;//这里要分号结尾,数字1是变量的唯一标号,不可重复,用来识别变量的。
string password=2;
}
//这是接口期望的响应数据格式
message helloResponse{
int32 num=1;
bool f=2;
}
//这里定义该服务
service HelloService{
//这里是rpc接口的定义,可定义多个
rpc sayHello(helloRequest) returns (helloResponse);//这里定义rpc接口要传入上面定义的期望的请求格式和返回格式
}
执行proto命令
写完proto后就可以执行命令生成对应的rpc接口了。在proto包下打开终端或控制台,运行以下命令
protoc --go_out=. helloService.proto//如果是其他语言的话,将go改成对应语言即可。
运行成功后生成了一个文件,到此基本上算成功了。我们不需要关心这个文件里面干了什么,我们只需要关心实现对应接口的具体业务即可,这里就不细说了。
小结
事物都是慢慢迭代的,grpc的出现绝不是偶然,它的出现使不同服务间的高效通信得以实现,当然使用起来也是高效简洁的,笔者目前阶段了解并会简单使用grpc即可。