如果您在使用 Pub/Sub 时遇到问题,可查阅以下实用的问题排查步骤。
无法创建主题
验证您是否拥有必要的权限。如需创建 Pub/Sub 主题,您需要拥有项目的 Pub/Sub Editor (roles/pubsub.editor
) Identity and Access Management 角色。如果您没有此角色,请与您的管理员联系。如需详细了解如何排查与主题相关的问题,请参阅排查主题问题和排查导入主题问题。
无法创建订阅
检查您是否已完成以下操作:
验证您是否拥有必要的权限。如需创建 Pub/Sub 订阅,您需要拥有项目的 Pub/Sub Editor (roles/pubsub.editor) IAM 角色。如果您没有此角色,请与您的管理员联系。
为订阅指定了名称。
指定要将订阅附加到的现有主题的名称。
如果创建推送订阅,请在
pushEndpoint
字段中以小写字母指定https://
(而不是http://
或HTTPS://
)作为接收网址的协议。
如需详细了解如何排查订阅问题,请参阅排查拉取订阅问题、排查推送订阅问题、排查 BigQuery 订阅问题和排查 Cloud Storage 订阅问题。
403 (Forbidden)
个错误
如果遇到此错误,请执行以下操作:
- 确保您已在 Google Cloud 控制台中启用 Pub/Sub API。
确保发出请求的主账号对相关 Pub/Sub API 资源具有所需权限,尤其是在您使用 Pub/Sub API 进行跨项目通信时。
如果您使用的是 Dataflow,请确保
{PROJECT_NUMBER}@cloudservices.gserviceaccount.com
和 Compute Engine 服务账号{PROJECT_NUMBER}-compute@developer.gserviceaccount.com
对相关 Pub/Sub API 资源都具有所需权限。如需了解详情,请参阅 Dataflow 安全和权限。如果您使用的是 App Engine,请检查项目的权限页面,查看 App Engine 服务账号是否被列为 Pub/Sub Editor。如果不是,请将您的 App Engine 服务账号添加为 Pub/Sub Editor。通常情况下,App Engine 服务账号的格式为
<project-id>@appspot.gserviceaccount.com
。
其他常见错误代码
如需查看与 Pub/Sub API 相关的其他常见错误代码及其说明的列表,请参阅错误代码。
使用过多的管理操作
如果您发现占用了过多管理操作配额,可能需要重构代码。例如,请参考下面的伪代码。在此示例中,管理操作 (GET
) 用于在尝试使用其资源之前检查是否存在订阅。GET
和 CREATE
都是管理员操作:
if !GetSubscription my-sub {
CreateSubscription my-sub
}
Consume from subscription my-sub
更有效的模式是尝试使用订阅中的消息(假设您可以合理地确定订阅名称)。在这种乐观方式中,您只能在发生错误时获取或创建订阅。请参考下面的示例:
try {
Consume from subscription my-sub
} catch NotFoundError {
CreateSubscription my-sub
Consume from subscription my-sub
}