第 3 章 gRPC 通信模式
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在前几章中,你学习了 gRPC 进程间通信技术的基础知识,并获得了一些构建基于 gRPC 的简单应用程序的实践经验。到目前为止,我们已经定义了一个服务接口,实现了一个服务,运行了一个 gRPC 服务器,并通过一个 gRPC 客户程序远程调用了服务操作。客户端和服务器之间的通信模式是简单的请求-响应式通信,即一个请求只得到一个响应。不过,利用 gRPC,除了简单的请求-响应模式外,还可以利用不同的进程间通信模式(或 RPC 风格)。
在本章中,我们将探讨基于 gRPC 的应用程序中使用的四种基本通信模式:一元 RPC(简单 RPC)、服务器端流、客户端流和双向流。我们将使用一些实际用例来展示每种模式,使用 gRPC IDL 定义服务定义,并使用 Go 实现服务和客户端。
备注
Go 和 Java 代码示例
为了保持一致性,本章的所有代码示例都是使用 Go 编写的。但如果你是 Java 开发人员,也可以在本书的源代码库中找到相同用例的完整 Java 代码示例。
简单 RPC(一元 RPC)
让我们从最简单的 RPC 方式--简单 RPC 开始讨论gRPC 通信模式。在简单 RPC 中,当客户端调用服务器的远程函数时,客户端向服务器发送一个请求,并获得一个响应,该响应会连同状态详情和尾随元数据一起发送。事实上,这与我们在第 1章和第 2 章中学到的通信模式如出一辙。让我们通过一个实际用例来进一步理解简单 RPC 模式。
假设我们需要为一个基于 gRPC 的在线零售应用程序构建一个OrderManagement 服务。作为该服务的一部分,我们必须实现的方法之一是getOrder 方法,在该方法中,客户端可以通过提供订单 ID 来检索现有订单。如图 3-1 所示,客户端发送一个包含订单 ID 的请求,服务响应一个包含订单信息的响应。因此,它遵循的是简单 RPC 模式。
图 3-1. 简单/一元 RPC
现在,让我们着手实现这一模式。第一步是使用getOrder 方法创建OrderManagement 服务的服务定义。如例 3-1 中的代码片段所示,我们可以使用协议缓冲区定义服务定义,而getOrder 远程方法接收单个请求订单 ID 并响应单个响应,这包括Order 消息。Order 消息具有在本用例中表示订单所需的结构。
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access