發布訊息總覽

如要透過 Pub/Sub 發布訊息,發布端應用程式會建立訊息並傳送至主題。

本文將概略介紹發布工作流程,包括主題和訊息的概念。

關於主題

Pub/Sub 主題是一種具名資源,代表訊息來源。發布者傳送訊息時,會指定特定主題。Pub/Sub 服務會使用這個主題名稱,將訊息傳送至附加至該主題的所有訂閱項目。如果訂閱方案有多位訂閱者,只有一位訂閱者會收到訊息。

發布者不必知道有多少訂閱者。這些主題專注於特定主題,確保訊息傳送和接收之間的問題分離。

Pub/Sub 支援兩種主題:標準主題和匯入主題。

主題的屬性

建立或更新主題時,可以指定主題屬性。

如要進一步瞭解主題屬性,請參閱「主題的屬性」。

關於匯入主題

匯入主題可讓 Pub/Sub 從其他來源擷取串流資料,並做為將資料傳送至主題的發布商應用程式。您可以使用控制台、Google Cloud CLI、REST 呼叫或用戶端程式庫,在主題上啟用擷取功能。Google Cloud 是管理匯入主題的一環,可監控及擴充擷取管道。

如果沒有匯入主題,從資料來源將資料串流至 Pub/Sub 時,需要額外服務。這項額外服務會從原始來源提取資料,並發布至 Pub/Sub。額外服務可以是 Apache Spark 等串流引擎,也可以是自訂服務。您也必須設定、部署、執行、擴充及監控這項服務。

以下列出有關匯入主題的重要資訊:

  • 與標準主題類似,您還是可以手動發布至匯入主題。

  • 每個匯入主題只能附加一個擷取來源。

建議匯入主題,以串流資料。如果您考慮將資料批次擷取至 BigQuery,而非串流擷取資料,可以試試 BigQuery 資料移轉服務。如要將資料擷取至 Cloud Storage,建議使用 Storage 移轉服務 (STS)。

Pub/Sub 支援下列主題匯入來源:

主題中的資料複製

Pub/Sub 主題會使用三個區域儲存資料。這項服務支援同步複製到至少兩個區域,並盡力複製到第三個區域。Pub/Sub 複寫功能僅適用於單一區域。

關於訊息

Pub/Sub 訊息是在服務中移動的資料。

訊息包含訊息資料和中繼資料的欄位。訊息中必須指定下列其中一個項目。

  • 訊息資料:這是訊息的核心內容,可以是任何文字或二進位資料。代表您要在發布者和訂閱者之間傳達的實際資訊。如果直接使用 REST API,訊息資料必須採用 base64 編碼。請參閱「發布訊息」一節的「REST」分頁中的範例。

  • 排序鍵:這是代表實體的 ID,訊息必須依此排序。含有相同排序鍵的訊息應會按照發布順序傳送至訂閱端。只有在您希望訊息依序傳送時,才需要排序鍵。如要進一步瞭解如何排序鍵,請參閱排序訊息

  • 屬性:這些是選用的鍵/值組合,可提供訊息的額外背景資訊。可用於轉送、篩選或豐富郵件內容。舉例來說,您可以新增時間戳記或交易 ID 等屬性。如要進一步瞭解發布訊息時使用的屬性,請參閱運用屬性發布訊息

Pub/Sub 服務會在訊息中加入下列欄位:

  • 主題專屬的訊息 ID
  • Pub/Sub 服務收到訊息時的時間戳記

舉例來說,以下是 JSON 格式的訊息

{
  "data": "This is the core message content.",
  "attributes": {
    "category": "notification",
    "user_id": "12345",
    "priority": "medium"
  },
    "orderingKey": "12345"
}

使用 Pub/Sub 用戶端程式庫發布訊息時,請以位元組陣列的形式提供訊息 data,例如 Node.js Buffer。如果資料是字串,您必須先將其編碼為位元組 (例如使用 UTF-8 編碼),再傳遞至用戶端程式庫。

如果直接使用 REST API,訊息資料必須採用 base64 編碼,並以字串形式傳送。

發布訊息工作流程

如要使用 Pub/Sub 發布訊息,發布者應用程式會建立訊息,並將訊息傳送至「主題」

  1. 建立包含資料的訊息。
  2. 選取任何選用的發布屬性。
  3. 傳送要求至 Pub/Sub 伺服器,將訊息發布至指定主題。
  4. Pub/Sub 服務會接收訊息,並依下列方式處理:

    • 系統會儲存訊息以供發布。

    • 訊息會複製到多個區域,確保耐用性和高可用性。

    • Pub/Sub 會找出與訊息主題相符的訂閱項目,並將訊息副本傳送給每個訂閱者。

Pub/Sub 會為現有訂閱者提供至少一次的傳送與最佳排序方法。

如要進一步瞭解 Pub/Sub 系統,請參閱 Pub/Sub 服務總覽

如要進一步瞭解 Pub/Sub 的運作方式,請參閱 Pub/Sub 架構總覽

後續步驟

Apache Kafka® 是 The Apache Software Foundation 或其關聯企業在美國與/或其他國家/地區的註冊商標。