本文档介绍如何提交 Pub/Sub 主题的架构修订版本。
准备工作
- 了解 Pub/Sub 架构的工作原理。
- 创建架构。
所需的角色和权限
如需获得提交架构修订版本和管理架构所需的权限,请让您的管理员为您授予项目的Pub/Sub Editor (roles/pubsub.editor) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含 提交架构修订版本和管理架构所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需提交架构修订版本和管理架构,需要具备以下权限:
-
创建架构:
pubsub.schemas.create -
将架构附加到主题:
pubsub.schemas.attach -
提交架构修订版本:
pubsub.schemas.commit -
删除架构或架构修订版本:
pubsub.schemas.delete -
获取架构或架构修订版本:
pubsub.schemas.get -
列出架构:
pubsub.schemas.list -
列出架构修订版本:
pubsub.schemas.listRevisions -
回滚架构:
pubsub.schemas.rollback -
验证消息:
pubsub.schemas.validate -
获取架构的 IAM 政策:
pubsub.schemas.getIamPolicy -
配置架构的 IAM 政策:
pubsub.schemas.setIamPolicy
您可以向用户、群组、网域或服务账号等正文授予角色和权限。您可以在一个项目中创建架构,并将其附加到位于另一个项目中的主题。 请确保您对每个项目都拥有所需的权限。
修改架构
您可以使用 Cloud de Confiance 控制台、gcloud CLI、Pub/Sub API、 或 Cloud 客户端库提交架构修订版本。
以下是一些提交架构修订版本的准则:
您可以在特定限制内修改架构:
对于 Protocol Buffer 架构,您可以添加或移除可选字段。 您无法添加或删除其他字段。您也无法修改任何现有字段。
对于 Avro 架构,请参阅 Avro 文档 ,了解有关架构解析的规则。新修订版本必须遵循这些规则,就像它是读取器架构和写入器架构一样。
一个架构一次最多可以有 20 个修订版本。 如果您超出此限制,请先删除一个架构修订版本,然后再创建另一个。
每个修订版本都有一个与其关联的唯一修订版本 ID。修订版本 ID 是自动生成的 8 字符 UUID。
当您更新用于主题验证的架构的修订版本范围或修订版本时,更改可能需要几分钟才能生效。
控制台
如需创建架构修订版本,请按照以下步骤操作:
在 Cloud de Confiance 控制台中,前往 Pub/Sub 架构 页面。
点击现有架构的架构 ID 。
系统随即会打开该架构的架构详情 页面。
点击创建修订版本 。
系统随即会打开创建架构修订版本 页面。
根据需要进行更改。
例如,对于您在 创建架构中创建的 Avro 示例架构,您可以添加一个额外的可选 字段,如下所示:
Price{ "type": "record", "name": "Avro", "fields": [ { "name": "ProductName", "type": "string", "default": "" }, { "name": "SKU", "type": "int", "default": 0 }, { "name": "InStock", "type": "boolean", "default": false }, { "name": "Price", "type": "double", "default": "0.0" } ] }点击验证定义 ,检查架构定义是否正确。
您还可以验证架构的消息。
点击测试消息 以测试示例消息。
在测试消息 窗口中,选择一种消息编码 类型。
在消息正文中,输入测试消息。
例如,以下是测试架构的示例消息。 在此示例中,请选择 Message encoding 作为
JSON。{"ProductName":"GreenOnions", "SKU":34543, "Price":12, "InStock":true}点击测试 。
点击提交 以保存架构。
gcloud
gcloud pubsub schemas commit SCHEMA_ID \ --type=SCHEMA_TYPE \ --definition=SCHEMA_DEFINITION
其中:
- SCHEMA_TYPE 是
avro或protocol-buffer。 - SCHEMA_DEFINITION 是包含架构定义的
string,系统会根据所选 架构类型设置其格式。
您还可以在文件中指定架构定义:
gcloud pubsub schemas commit SCHEMA_ID \ --type=SCHEMA_TYPE \ --definition-file=SCHEMA_DEFINITION_FILE
其中:
- SCHEMA_TYPE 是
avro或protocol-buffer。 - SCHEMA_DEFINITION_FILE 是包含架构定义文件路径的
string,系统会根据所选 架构类型设置其格式。
REST
如需提交架构修订版本,请发送如下所示的 POST 请求:
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/schemas/SCHEMA_ID:commit Authorization: Bearer $(gcloud auth application-default print-access-token) Content-Type: application/json --data @response-body.json
在请求正文中指定以下字段:
{ "definition": SCHEMA_DEFINITION "type": SCHEMA_TYPE "name": SCHEMA_NAME }
其中:
- SCHEMA_TYPE 是
AVRO或PROTOCOL_BUFFER。 - SCHEMA_DEFINITION 是包含 架构定义的字符串,系统会根据所选 架构类型设置其格式。
- SCHEMA_NAME 是现有架构的名称。
响应正文应包含 架构资源的 JSON 表示法。 例如:
{
"name": SCHEMA_NAME,
"type": SCHEMA_TYPE,
"definition": SCHEMA_DEFINITION
"revisionId": REVISION_ID
"revisionCreateTime": REVISION_CREATE_TIME
}
其中:
- REVISION_ID 是服务器为修订版本生成的 ID。
- REVISION_CREATE_TIME 是创建 修订版本时采用 ISO 8601 格式的时间戳。
Go
以下示例使用的是 Go Pub/Sub 客户端库的主要版本 (v2)。如果您仍在使用 v1 库,请参阅 迁移到 v2 的指南。 如需查看 v1 代码示例列表,请参阅 已废弃的代码示例。
在尝试此示例之前,请按照 《快速入门:使用客户端库》中的 Go 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Go API 参考文档。
Avro
Proto
C++
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 C++ 设置说明进行操作。如需了解详情,请参阅 Pub/Sub C++ API 参考文档。
Avro
Proto
Java
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Java API 参考文档。
Avro
Proto
Python
在尝试此示例之前,请按照《快速入门:使用客户端库》中的 Python 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Python API 参考文档。
Avro
Proto
Node.js
在尝试此示例之前,请按照 《快速入门:使用客户端库》中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Node.js API 参考文档。
Avro
Proto
Node.js
在尝试此示例之前,请按照 《快速入门:使用客户端库》中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 Pub/Sub Node.js API 参考文档。
Avro
Proto
提交架构修订版本后,您可以查看新 修订版本的详细信息,具体请访问架构页面。