简介

RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。

RPC和其他协议的区别:RMI远程方法调用是RPC的一种具体实现,webservice、restfull都是RPC,只是消息的组织形式、消息协议不同

RPC协议的主要目的是做到不同服务间调用方法像同一服务间调用本地方法一样。

  • gRPC由google开发,是一款语言中立、平台中立、开源的远程过程调用系统
  • gRPC客户端和服务端可以在多种环境中运行和交互,例如用java写一个服务端,可以用go语言写客户端调用

gRPC与Protobuf介绍

  • 微服务架构中,由于每个服务对应的代码库是独立运行的,无法直接调用,彼此间的通信就是个大问题
  • gRPC可以实现微服务,将大的项目拆分为多个小且独立的业务模块,也就是服务,各服务间使用高效的protobuf协议进行RPC调用,gRPC默认使用protocol buffers,这是google开源的一套成熟的结构数据序列化机制(当然也可以使用其他数据格式如JSON)
  • 可以用proto files创建gRPC服务,用message类型来定义方法参数和返回类型

安装

  • go get github.com/golang/protobuf/proto
  • go get google.golang.org/grpc
  • go get github.com/golang/protobuf/protoc-gen-go
    上面安装好后,会在GOPATH/bin下生成protoc-gen-go
  • go get -u google.golang.org/grpc

环境确认

终端输入以下能打印出版本信息

protoc --version 

$GOPATH/bin 目录下有 protoc-gen-goprotoc-gen-go-grpc 这两个可执行文件

运行第一个 helloworld

下载官方示例代码,以grpc-go的v1.41.0版本为例,下载代码并进入到grpc-go/examples/helloworld目录

git clone -b v1.41.0 https://github.com/grpc/grpc-go
cd grpc-go/examples/helloworld

运行代码

启动服务端

go run greeter_server/main.go

启动客户端

go run greeter_client/main.go

参考资料:

https://www.topgoer.com/%E5%BE%AE%E6%9C%8D%E5%8A%A1/gRPC/%E5%AE%89%E8%A3%85.html

https://juejin.cn/post/7048486841728630798
https://www.lixueduan.com/posts/grpc/02-hello-world/

grpc 官方网站:https://grpc.io/docs/languages/go/