问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

【启程Golang之旅】一站式理解Go语言中的gRPC

创作时间:
作者:
@小白创作中心

【启程Golang之旅】一站式理解Go语言中的gRPC

引用
CSDN
1.
https://m.blog.csdn.net/m0_74823827/article/details/144319012

在微服务架构中,gRPC作为一种高性能的远程过程调用框架,因其高效通信、跨语言支持和强大的功能特性而备受青睐。本文将从gRPC的基本概念出发,详细介绍其主要特点,并通过具体的代码示例,展示如何使用Go语言构建基于gRPC的服务通信。无论你是gRPC的初学者还是有一定经验的开发者,都能从本文中获得有价值的知识和实践指导。

初识gRPC

gRPC Remote Procedure Call简称gRPC:是一个高性能开源的远程过程调用rpc框架,最初由Google开发,它基于HTTP/2协议并使用Protocol Buffers(简称Protobuf)作为接口定义语言(IDL)和消息交换格式。

其主要特点如下所示:

  1. 高效通信:使用HTTP/2协议,支持多路复用、流控制、头压缩等特性,相比传统的HTTP/1.x协议,能提供更高效的网络通信。
  2. 跨语言支持:支持多种编程语言,包括C、C++、Java、Python、Go、Ruby、Node.js等,使得它适用于不同的技术栈和平台。
  3. 基于Protocol Buffers:默认使用Protocol Buffers作为数据的序列化格式,具有较小的消息体积和高效的序列化/反序列化性能。
  4. 双向流式通信:支持四种类型的远程过程调用:单向调用(普通请求-响应),服务器流式调用(单请求,多响应),客户端流式调用(多请求,单响应),以及双向流式调用(多请求,多响应)。
  5. 支持负载均衡和认证:gRPC内建对负载均衡、服务发现、身份验证、通道加密等功能的支持。
  6. 跨平台与微服务支持:由于gRPC具有强大的语言支持与高效的性能,特别适合用在微服务架构中,尤其是需要高并发与低延迟通信的场景。

gRPC的通信方式采用的是最底层的TCP或Unix Socket协议实现的,核心库就是在HTTP/2协议之上又构建了针对Go语言的gRPC核心库,应用程序会通过gRPC插件生产的Stub代码和gRPC核心库进行通信,也可以直接和gRPC核心库通信:

当然这里我们也可以参考官方文档,也可以查阅中文文档,

gRPC基本使用

在使用gRPC之前请确保电脑上已经安装好了protobuf grpc插件,这里我们给出如下的安装命令,具体想了解protobuf知识的,可以参考我之前的文章:

// 如果下载失败(网络延迟断开),可以考虑先开启代理,在执行如下两个插件安装
go env -w GOPROXY=https://goproxy.cn,direct

// 安装protoc-gen-go
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
// 安装 grpc
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

比如下面这段proto文件,中间的部分代表服务类型,正常的rpc是不能编译它的,这里我们就需要借助我们上面安装好的grpc插件进行编译:

然后我们执行如下命令,可以同时生成rpc和grpc生成的go文件:

protoc --go_out=. --go-grpc_out=. *.proto
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号