本文档介绍了如何使用流控制处理消息 发布到主题。
流控制简介
发布者客户端发布消息的速度可能会快于客户端能够向 Pub/Sub 服务发送数据的速度。客户端受许多因素的限制,包括:
- 机器 CPU、RAM 和网络容量
- 网络设置,例如未完成的请求数和可用带宽
- 每个发布请求的延迟时间(主要取决于 Pub/Sub 服务、客户端和 Google Cloud 之间的网络连接)
如果发布请求速率超过这些限制,请求会在内存中累积
直到其失败并显示 DEADLINE_EXCEEDED
错误。如果在一次循环中发布数万条消息,导致生成数千个请求(以毫秒为单位),则此情况尤为可能。
您可以通过在 Monitoring 中检查服务器端指标来诊断此问题。您将无法看到因 DEADLINE_EXCEEDED
而失败的请求,只能看到成功的请求。成功请求率表示客户端机器的吞吐量容量,为配置流控制提供了基准。
要缓解流速率问题,请为发布者客户端配置流控制以限制发布请求的速率。您可以配置为未完成请求分配的最大字节数以及允许的未完成消息的最大数量。请根据客户端机器的吞吐量容量设置这些限制。
准备工作
在配置发布工作流之前,请确保您已完成以下任务:
所需的角色
为了获得使用流控制所需的权限,
请让管理员授予您
针对您的主题的 Pub/Sub Publisher (roles/pubsub.publisher
) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您需要拥有其他权限才能 创建或更新主题和订阅。
对消息使用流控制
发布者流控制通过以下语言的 Pub/Sub 客户端库提供:
C++
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 C++ 设置说明进行操作。如需了解详情,请参阅 Pub/Sub C++ API 参考文档。
Go
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Go 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Go API 参考文档。
Java
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Java API 参考文档。
Node.js
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Node.js API 参考文档。
Node.js
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Pub/Sub Node.js API 参考文档。
Python
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Python 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Python API 参考文档。
Ruby
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Ruby 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Ruby API 参考文档。