Skip to Content
gRPC:快速入门
book

gRPC:快速入门

by Kasun Indrasiri, Danesh Kuruppu
May 2025
Intermediate to advanced
204 pages
2h 24m
Chinese
O'Reilly Media, Inc.
Content preview from gRPC:快速入门

第 5 章 gRPC:基础之外

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

当你构建真实世界的 gRPC 应用程序时,你可能需要用各种功能来增强它们,以满足各种要求,例如拦截传入和传出的 RPC、弹性处理网络延迟、处理错误、在服务和消费者之间共享元数据等等。

备注

为了保持一致性,本章中的所有示例都使用 Go 进行解释。如果您更熟悉 Java,可以参考源代码库中的 Java 示例,了解相同的用例。

在本章中,你将学习一些关键的高级 gRPC 功能,包括使用 gRPC 拦截器在服务器端和客户端拦截 RPC、使用截止时间指定 RPC 完成的等待时间、服务器端和客户端的错误处理最佳实践、使用多路复用在同一服务器上运行多个服务、在应用程序之间共享自定义元数据、在调用其他服务时使用负载平衡和名称解析技术,以及压缩 RPC 调用以有效利用网络带宽。

让我们从 gRPC 拦截器开始讨论。

拦截器

在构建 gRPC 应用程序时,无论是客户端还是服务器应用程序,都可能希望在远程函数执行之前或之后执行一些常用逻辑。在 gRPC 中,你可以使用一种称为拦截器的扩展机制来拦截 RPC 的执行,以满足某些要求,如日志记录、身份验证、度量等。拦截器是 gRPC 的关键扩展机制之一,在日志记录、身份验证、授权、度量、跟踪和其他客户要求等用例中非常有用。

备注

并非所有支持 gRPC 的语言都支持拦截器,而且每种语言中拦截器的实现也可能不同。在本书中,我们只介绍 Go 和 Java。

根据拦截的 RPC 调用类型,gRPC 拦截器可分为两种类型。对于一元 RPC,可以使用一元拦截器,而对于流 RPC,可以使用流拦截器。这些拦截器可用于 gRPC 服务器端或 gRPC 客户端。首先,让我们从在服务器端使用拦截器开始。

服务器端拦截器

当客户端调用 gRPC 服务的远程方法时,可以通过使用服务器端拦截器在执行远程方法之前执行一个通用逻辑。当你需要在调用远程方法前应用某些功能(如身份验证)时,这将有所帮助。如图 5-1 所示,你可以在开发的任何 gRPC 服务器中插入一个或多个拦截器。例如,要在OrderManagement gRPC 服务中插入一个新的服务器端拦截器,可以在创建 gRPC 服务器时实现拦截器并注册它。

Server-side interceptors
图 5-1. 服务器端拦截器

在服务器端,一元拦截器允许你拦截一元 RPC 调用,而流拦截器则拦截流 RPC。让我们首先讨论服务器端的一元拦截器。

一元拦截器

如果想在服务器端拦截 gRPC 服务的单值 RPC,就需要为 gRPC 服务器实现一个单值拦截器。如例 5-1 中的 Go 代码片段所示,你可以通过实现UnaryServerInterceptor 类型的函数并在创建 gRPC 服务器时注册该函数来实现这一点。UnaryServerInterceptor 是服务器端一元拦截器的类型,其签名如下:

func(ctx context.Context, req interface{}, info *UnaryServerInfo,
	                     handler UnaryHandler) (resp interface{}, err error)

在这个函数中,你可以完全控制所有进入你的 gRPC 服务器的一元 ...

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

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

软件架构师速成指南

软件架构师速成指南

Gregor Hohpe
企业级Java开发中的应用人工智能 (Chinese Edition)

企业级Java开发中的应用人工智能 (Chinese Edition)

Alex Soto Bueno, Markus Eisele, Natale Vinto
高性能MySQL:第4版

高性能MySQL:第4版

Silvia Botros, Jeremy Tinley

Publisher Resources

ISBN: 9798341658004