本文說明如何為 Pub/Sub 主題建立結構定義。
事前準備
建立結構定義前,請先完成下列步驟:
- 瞭解主題和發布工作流程。
- 瞭解 Pub/Sub 結構定義的運作方式。
- 建立主題。
必要角色和權限
如要取得建立及管理結構定義所需的權限,請要求管理員授予您專案的「Pub/Sub 編輯者」 (roles/pubsub.editor
) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這個預先定義的角色具備建立及管理結構定義所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要建立及管理結構定義,必須具備下列權限:
-
建立結構定義:
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
-
取得結構定義的身分與存取權管理政策:
pubsub.schemas.getIamPolicy
-
設定結構定義的 IAM 政策:
pubsub.schemas.setIamPolicy
您可以將角色和權限授予主體,例如使用者、群組、網域或服務帳戶。您可以在一個專案中建立結構定義,並將其附加至位於其他專案的主題。請確認您具備每個專案的必要權限。
建立結構定義
您可以使用 Google Cloud 控制台、gcloud CLI、Pub/Sub API 或 Cloud 用戶端程式庫建立結構定義。
建立結構定義前,請先詳閱這篇結構定義重要資訊。
控制台
如要建立結構定義,請按照下列步驟操作:
前往 Google Cloud 控制台的「Pub/Sub schemas」(Pub/Sub 結構定義) 頁面。
按一下「建立結構定義」。
在「架構 ID」欄位中,輸入架構的 ID。
如需命名結構定義的規範,請參閱「命名主題、訂閱項目或快照的規範」。
在「結構定義類型」中,選取 Avro 或通訊協定緩衝區。
進一步瞭解結構定義類型。
在「Schema definition」(結構定義) 欄位中,輸入結構定義的 Avro 或通訊協定緩衝區定義。
舉例來說,以下是 Avro 的結構定義範例。
{ "type": "record", "name": "Avro", "fields": [ { "name": "ProductName", "type": "string", "default": "" }, { "name": "SKU", "type": "int", "default": 0 }, { "name": "InStock", "type": "boolean", "default": false } ] }
選用:按一下「驗證定義」,檢查結構定義是否正確。
驗證檢查不會檢查結構定義是否與要發布的訊息相容。在下一個步驟中測試訊息。
選用:您可以測試是否發布了含有正確結構定義的訊息。
按一下「測試訊息」。
在「測試訊息」視窗中,選取「訊息編碼」類型。
在「郵件內文」中輸入測試訊息。
按一下「Test」。
舉例來說,以下是測試結構定義的範例訊息。 在本範例中,請選取 訊息編碼方式為
JSON
。{"ProductName":"GreenOnions", "SKU":34543, "InStock":true}
離開測試訊息頁面。
按一下「建立」儲存結構定義。
gcloud
gcloud pubsub schemas create SCHEMA_ID \ --type=SCHEMA_TYPE \ --definition=SCHEMA_DEFINITION
其中:
- SCHEMA_TYPE 是
avro
或protocol-buffer
。 - SCHEMA_DEFINITION 是
string
,內含結構定義,格式則根據所選的結構類型而定。
您也可以在檔案中指定結構定義:
gcloud pubsub schemas create 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 Authorization: Bearer $(gcloud auth application-default print-access-token) Content-Type: application/json --data @response-body.json
指定以下要求主體欄位:
{ "definition": SCHEMA_DEFINITION "type": SCHEMA_TYPE }
其中:
- SCHEMA_TYPE 是
avro
或protocol-buffer
。 - SCHEMA_DEFINITION 是包含結構定義的字串,格式取決於所選的結構類型。
回應主體應包含結構定義資源的 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 時間戳記。
C++
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 C++ 設定操作說明進行操作。詳情請參閱 Pub/Sub C++ API 參考說明文件。
Avro
Proto
C#
在嘗試這個範例之前,請先按照快速入門:使用用戶端程式庫中的 C# 設定操作說明進行操作。詳情請參閱 Pub/Sub C# API 參考說明文件。
Avro
Proto
Go
以下範例使用 Go Pub/Sub 用戶端程式庫的主要版本 (v2)。如果您仍在使用第 1 版程式庫,請參閱第 2 版遷移指南。如要查看第 1 版程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 Pub/Sub Go API 參考說明文件。
Avro
Proto
Java
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Java 設定操作說明進行操作。詳情請參閱 Pub/Sub Java 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
PHP
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 PHP 設定說明進行操作。 詳情請參閱 Pub/Sub PHP API 參考說明文件。
Avro
Proto
Python
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫中的 Python 設定操作說明來進行。詳情請參閱 Pub/Sub Python API 參考說明文件。
Avro
Proto
Ruby
以下範例使用 Ruby Pub/Sub 用戶端程式庫 v3。如果您仍在使用第 2 版程式庫,請參閱 第 3 版遷移指南。如要查看 Ruby 第 2 版程式碼範例清單,請參閱 已淘汰的程式碼範例。
在試用這個範例之前,請先按照快速入門:使用用戶端程式庫的操作說明設定 Ruby 環境。詳情請參閱 Pub/Sub Ruby API 參考說明文件。
Avro
Proto
建立結構定義後,您可以在「結構定義」頁面中查看結構定義的詳細資料。
您可以將結構定義與主題建立關聯。