RPC(Remote Procedure Call)是远程过程调用。可以像调用本地服务一样取调用远程服务。百度的解释是它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。暂时可以先把他的功能理解为何api一样。
rpc是基于client / server的,所以在使用rpc时,首先就是建立连接。
rpc和RESTful API的一个区别就是,在进行数据传输的时候,rpc使用的是二进制数据,而API使用的JSON,所以rpc在进行调用的时候需要对数据进行序列化。
传输效率上。 rpc使用自定义的协议,对传输数据进行二进制序列化,让请求报文体积更小。但是相对而言就多了序列化的步骤,比较麻烦,RESUful就相对简单些。
从本质区别上看,RPC是基于TCP实现的,RestFul是基于HTTP来实现的。
因为HTTP协议是各个框架都普遍支持的。在toC情况下,因为不知道情况来源的框架、数据形势是什么样的,所以在网关可以使用Restful利用http来接受。而在微服务内部的各模块之间因为各协议方案是公司内部自己定的,所以知道各种数据方式,可以使用TCP传输以使各模块之间的数据传输更快。所以可以网关和外界的数据传输使用RESTFUL,微服务内部的各模块之间使用RPC。
gRPC是由Google开发的一款语言中立、平台中立、开源的远程过程调用( RPC)技术,主要用来解决性能损失的问题。gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建。它使用HTTP/2作为通信协议,使用Protocol Buffers作为序列化协议。
grpc官网
1.安装go版本的proto
Linux:apt install -y protobuf-compiler
Mac:brew install protobuf
Windows: 到 https://github.com/protocolbuffers/protobuf/releases 下载相应的包
2.安装go语言的插件 protoc-gen-go
go get -u google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
go get -u google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
3.将GOPATH下的bin目录添加到环境变量中
go get -u google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
https://colobu.com/2019/10/03/protobuf-ultimate-tutorial-in-go/
在proto文件编写完毕,在proto文件路径下使用命令
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative xxxx.proto
「注意:」上述的命令中最后的 xxxx.proto 中的xxxx替换自己 proto文件的名字