gRPC 中 Client 与 Server 数据交互的 4 种模式

news/2024/2/29 4:09:54

项目地址:grpc-modes

最近使用 gRPC 入门微服务开发,特此总结了 gRPC 中 4 种运行模式

目录结构

$GOPATH
└── grpc├── simple                  // 简单模式 RPC│   ├── client    │   │   └── client.go        # 客户端代码│   ├── proto            │   │   ├── user.pb.go    │   │   └── user.proto       # 通信的 protobuf 协议│   └── server│       └── server.go        # 服务端代码├── server-side-streaming    // 服务端流式 RPC ├── client-side-streaming    // 客户端流式 RPC └── bidirectional-streaming  // 客户端与服务端双向流式 RPC

UserService 微服务

本项目中定义了一个微服务:UserService,它只有一个 RPC:GetUserInfo()

syntax = "proto3";
package grpc.simple;// 定义 UserService 微服务
service UserService {// 微服务中获取用户信息的 RPC 函数rpc GetUserInfo (UserRequest) returns (UserResponse);
}// 客户端请求的格式
message UserRequest {int32 ID = 1;
}// 服务端响应的格式
message UserResponse {string name = 1;int32 age = 2;
}

GetUserInfo() 函数中模拟了一个数据库,存储用户的姓名和年龄:

// ID 为 key,用户信息为 value 模拟数据库查询结果
var users = map[int32]pb.UserResponse{1: {Name: "Dennis MacAlistair Ritchie", Age: 70},2: {Name: "Ken Thompson", Age: 75},3: {Name: "Rob Pike", Age: 62},
}

客户端请求带上 ID,查询后将用户信息作为响应返回。

客户端与服务端进行数据交互的四种模式

simpe 简单模式 RPC

客户端发起一个请求到服务端,服务端返回一个响应。

client 请求 ID 为 2 的用户数据,server 返回 ID 为 2 的用户数据:

simple

server-side streaming 服务端流式 RPC

客户端发起一个请求到服务端,服务端返回一段连续的数据流响应。

client 请求 1 的用户数据,server 返回 1、2、3 的用户数据流:

server-side-streaming

client-side streaming 客户端流式 RPC

客户端将一段连续的数据流发送到服务端,服务端返回一个响应。

client 请求 1、2、3 的用户数据流,server 返回 3 的用户数据:

client-side-streaming

Bidirectional streaming 双向数据流模式的 gRPC

客户端将连续的数据流发送到服务端,服务端返回交互的数据流。

client 依次请求 1、2、3 的用户数据流,服务端依次返回 1、2、3 的用户数据流:

bidirectional-streaming

最后

最近在系统的学习 Golang 的微服务,从 gRPC 开始,到 go-micro、Docker 化微服务等,每周更新。欢迎关注我的博客 wuYinBlog

希望本项目对你有所帮助 ☺️


https://www.jiucaihua.cn/news/show-898820.html

相关文章

Hive安装教程

目录1.环境准备2.解压安装3.配置环境变量4.配置文件配置hive-env.sh配置hive-site.xml5.上传配置jar6.启动1.环境准备 安装hadoop 以及 zookeeper、mysql 《适合小白的配置hadoop环境教程》 《zookeeper的安装与配置》 《Linux环境配置MySQL(附文件)…

外观模式(十二)

外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的…

MapReduce入门

文章目录1.MapReduce定义2.MapReduce优缺点2.1优点2.2缺点3.MapReduce核心思想4.MapReduce进程5.MapReduce编程规范5.1.Mapper阶段5.2.Reducer阶段5.3.Driver阶段6.WordCount案例实操6.1需求6.2需求分析6.3环境准备6.4编写程序1.MapReduce定义 MapReduce是一个分布式运算程序的…

分布式资源调度框架YARN

文章目录1.YARN的前世今生2.YARN概述3.YARN的基本架构核心组件3.1ResouceManager3.2NodeManager3.3ApplicationMaster3.4Container4. YARN的工作机制5.启动JobHistoryServer6.YARN的资源调度器7.YARN常用命令1.YARN的前世今生 Hadoop1.x版本中最大的问题是资源问题 对数据的处…

再探Circuit Breaker之使用Polly

前言 上一篇介绍了使用Steeltoe来处理服务熔断,这篇我们将用Polly来处理服务熔断。 不废话了,直接进正题。 简单的例子 同样先定义一个简单的服务。 [Route("api/[controller]")] public class ValuesController : Controller {// GET api/val…

Hadoop序列化

文章目录1.序列化概述1.1什么是序列化1.2为什么要序列化1.3为什么不用java的序列化2.常用数据序列化类型3.自定义bean对象实现序列化接口(Writable)4.序列化案例实操4.1需求4.2需求分析4.3编写MapReduce程序1.序列化概述 1.1什么是序列化 序列化就是把…

Yarn资源调度器

文章目录1.Yarn基本架构2.Yarn工作机制3.作业提交全过程4.资源调度器4.1先进先出调度器(FIFO)4.2容量调度器(Capacity Scheduler)4.3公平调度器(Fair Scheduler)5.任务的推测执行Yarn是一个资源调度平台&am…

Hive(一)之Hive入门

文章目录1.Hive入门1.1什么是Hive1.2 Hive的优缺点1.2.1 优点1.2.2 缺点1.3Hive架构原理1.Hive入门 1.1什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计。 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表&…

Hive(二)之 Hive安装

文章目录2.Hive安装2.1Hive安装2.2HiveJDBC访问2.2.1启动hiveserver2服务2.2.2连接hiveserver2服务2.2.3注意2.3Hive常用交互命令2.4Hive其他命令操作2.5Hive常见属性配置2.5.1数据仓库位置配置2.5.2查询后信息显示配置2.5.3运行日志信息配置2.Hive安装 2.1Hive安装 《Hive安…

Powerdesigner使用技巧

1.设置name不映射code Tools--》dialog,取消name到code映射 2.生成的时候自动把name更新到comment列 3.comment设为name脚本 使用方法使用方法PowerDesigner->Tools->Execute Commands->Edit/Run Scripts 可以保存该脚本为:comment2name.vbs Option Expl…