(這是 Set Up an App Dev Environment on Google Cloud 的第 4 篇)

GSP094 - Pub/Sub: Qwik Start - Python
GSP095 - Pub/Sub: Qwik Start - Command Line
GSP096 - Pub/Sub: Qwik Start - Console

這三個 Pub/Sub 快速開始 labs 其實重複性相當高,但每個都從不同的角度切入學習 - Python 程式設計、命令列操作、以及圖形化介面。建議大家可以挑一個自己最熟悉的介面來練習,理解了核心概念後,其他介面就很容易上手了!

介紹:

Pub/Sub 是 Google Cloud 的全受控即時訊息服務,讓應用程式能夠可靠、快速且非同步地交換訊息。透過解耦發送者和接收者,Pub/Sub 支援事件驅動架構、異步工作流程,以及分散式系統間的資料串流。無論是透過 Python 程式碼、gcloud 命令列,還是 Cloud Console 圖形介面,都能輕鬆上手這個強大的訊息中介服務。

主要特色包括:

➊ 全受控服務:無需管理基礎架構,Google Cloud 自動處理擴展和可用性
➋ 非同步訊息:解耦生產者和消費者,支援事件驅動架構
➌ 多重介面:支援程式設計、命令列、圖形介面等多種操作方式
➍ 訊息持久性:訊息可保留最多7天,確保可靠交付
➎ 靈活訂閱:支援拉取(Pull)和推送(Push)兩種訂閱模式
➏ 全球分佈:支援跨區域訊息傳遞,滿足全域應用需求

在這些 Lab 中實作:

➊ 建立 Pub/Sub 主題(Topics):學習如何建立訊息的分類容器
➋ 建立訂閱(Subscriptions):設定消費者如何接收特定主題的訊息
➌ 發布訊息:使用不同介面將資料發送到主題
➍ 接收訊息:透過訂閱拉取或推送方式獲取訊息
➎ 資源清理:正確刪除測試用的主題和訂閱以避免費用
➏ 驗證操作:確認訊息成功發布和接收

一樣附上指令整理和實作影片~
後續會繼續分享參加計劃的心得!

𝕂𝕖𝕖𝕡 𝕝𝕖𝕒𝕣𝕟𝕚𝕟𝕘. 𝕂𝕖𝕖𝕡 𝕙𝕒𝕔𝕜𝕚𝕟𝕘!

實作影片:

GSP094

GSP095

GSP096

指令整理:

環境初始化

此部分設定 GCP 專案的基礎環境變數。這些變數在後續指令中被引用,確保所有操作都在正確的專案、區域、實例上執行。

export PROJECT_ID=$(gcloud config get-value project)
echo $PROJECT_ID  # 驗證專案 ID 已正確設定

核心 Pub/Sub 架構

Pub/Sub 的基礎架構包含主題(Topics)和訂閱(Subscriptions)。主題是訊息的容器,訂閱決定了誰能接收哪些訊息。這是整個訊息系統的骨幹,理解了這個概念就能掌握 Pub/Sub 的運作原理。

# 建立主題 - 訊息的邏輯分類容器
gcloud pubsub topics create myTopic

# 建立訂閱 - 連接主題和消費者的橋樑
gcloud pubsub subscriptions create --topic myTopic mySubscription

# 檢視現有資源 - 確保操作正確
gcloud pubsub topics list
gcloud pubsub topics list-subscriptions myTopic
gcloud pubsub subscriptions list

常見坑點:主題名稱在專案內必須唯一,訂閱必須綁定到現有的主題 概念連結:主題就像是郵局的信箱,訂閱就是郵差的配送路線,訊息就是信件本身

訊息處理流程

訊息的發布和接收是 Pub/Sub 的核心功能。發布者將資料推送到主題,訂閱者透過訂閱來獲取訊息。支援一次性拉取單一訊息或批次拉取多個訊息。

# 發布訊息到主題 - 資料進入 Pub/Sub 系統的入口
gcloud pubsub topics publish myTopic --message "Hello World"
gcloud pubsub topics publish myTopic --message "Publisher thinks Pub/Sub is awesome"

# 接收訊息 - 從訂閱拉取資料(預設只拉取一條)
gcloud pubsub subscriptions pull mySubscription --auto-ack

# 批次接收訊息 - 一次拉取多條訊息
gcloud pubsub subscriptions pull mySubscription --limit=3 --auto-ack

常見坑點:拉取訊息後如果不確認(ack),訊息會重新出現;--auto-ack 會自動確認,但無法重複接收同一訊息 概念連結:訊息發布和接收的設計,讓生產者和消費者完全解耦,實現真正的異步通訊

Python 程式設計介面

除了命令列,Pub/Sub 也提供豐富的程式設計介面。Python 客戶端函式庫讓開發者能夠在應用程式中整合 Pub/Sub 功能,實現更複雜的訊息處理邏輯。

# Python 環境準備(GSP094 專用)
pip install --upgrade google-cloud-pubsub
git clone <https://github.com/googleapis/python-pubsub.git>
cd python-pubsub/samples/snippets

# 使用 Python 指令碼操作 Pub/Sub
python publisher.py $PROJECT_ID create MyTopic          # 建立主題
python subscriber.py $PROJECT_ID create MyTopic MySub   # 建立訂閱
python subscriber.py $PROJECT_ID receive MySub          # 接收訊息

常見坑點:Python 虛擬環境必須正確啟用,否則會出現模組找不到的錯誤 概念連結:程式設計介面讓 Pub/Sub 能夠整合到應用程式邏輯中,實現自動化的訊息處理工作流程

資源清理與維護

良好的資源管理是雲端服務的重要習慣。及時清理測試資源可以避免不必要的費用,也保持專案的整潔。

# 刪除訂閱和主題 - 清理測試資源
gcloud pubsub subscriptions delete mySubscription
gcloud pubsub topics delete myTopic

# 驗證清理完成 - 確保資源已完全移除
gcloud pubsub topics list
gcloud pubsub subscriptions list

常見坑點:必須先刪除訂閱才能刪除主題,否則會出現依賴錯誤 概念連結:資源清理的概念貫穿所有 GCP 服務,是成本控制和安全管理的重要環節

完整工作流程驗證

將上述概念整合起來,形成完整的工作流程驗證。這個流程展示了從環境設定到訊息處理的完整生命週期。

# 端到端測試 - 驗證整個 Pub/Sub 流程
gcloud pubsub topics create test-topic
gcloud pubsub subscriptions create --topic test-topic test-sub
gcloud pubsub topics publish test-topic --message "Integration test message"
gcloud pubsub subscriptions pull test-sub --auto-ack
gcloud pubsub subscriptions delete test-sub
gcloud pubsub topics delete test-topic

Google Cloud AI Study Jam 2025 學習系列 15