初识go语言-grpc的简单使用 | 青训营笔记

170 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第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命令即可生成无关语言的可以在服务间进行通信的接口。

QQ截图20230202205025.png

编写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改成对应语言即可。

QQ截图20230202211522.png

运行成功后生成了一个文件,到此基本上算成功了。我们不需要关心这个文件里面干了什么,我们只需要关心实现对应接口的具体业务即可,这里就不细说了。

小结

事物都是慢慢迭代的,grpc的出现绝不是偶然,它的出现使不同服务间的高效通信得以实现,当然使用起来也是高效简洁的,笔者目前阶段了解并会简单使用grpc即可。

参考