解锁 Google Cloud Pub/Sub 的强大功能

Google Cloud Pub/Sub 是一种可扩展的消息传递服务,用于在分布式系统中实现异步通信。它允许发布者向特定主题发送消息,而订阅者可以从这些主题接收消息。这种解耦的架构使得系统更加灵活和可扩展。

Pub/Sub 的主要特点

  • 异步通信:发布者无需等待订阅者确认即可发送消息。
  • 可靠性:确保每条消息至少被送达一次,可能会有重复。
  • 可扩展性:支持大规模、高吞吐量的消息传递。
  • 实时性 :消息延迟通常在100毫秒以内126

Pub/Sub 的应用场景

  • 实时数据处理:适用于实时分析用户行为或 IoT 设备数据。
  • 微服务架构:用于服务间的解耦和异步通信。
  • 事件驱动系统 :如用户注册、订单创建等事件的通知8

教程:使用 Pub/Sub 发布和接收消息

步骤 1:设置 Google Cloud 项目

  1. 创建项目:在 Google Cloud Console 中创建一个新项目。
  2. 启用 Pub/Sub API:在项目中启用 Google Cloud Pub/Sub API。

步骤 2:创建主题和订阅

  1. 创建主题 :在 Pub/Sub 中创建一个主题(例如 my_topic)。
  2. 创建订阅 :为该主题创建一个订阅(例如 my_subscription)。

步骤 3:发布消息

使用 gcloud 命令行工具发布消息到主题:

arduino 复制代码
bash
gcloud pubsub topics publish my_topic --message "Hello, Pub/Sub!"

步骤 4:接收消息

使用 gcloud 命令行工具从订阅中拉取消息:

arduino 复制代码
bash
gcloud pubsub subscriptions pull --auto-ack my_subscription

步骤 5:使用客户端库

也可以使用客户端库(如 Python)来发布和接收消息:

ini 复制代码
python
from google.cloud import pubsub_v1

# 发布消息
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path('your_project', 'my_topic')
data = 'Hello, Pub/Sub!'.encode('utf-8')
publisher.publish(topic_path, data)

# 接收消息
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path('your_project', 'my_subscription')
response = subscriber.pull(subscription_path, max_messages=10)

for message in response.received_messages:
    print(message.message.data.decode('utf-8'))
    subscriber.ack(subscription_path, [message.ack_id])

步骤 6:配置推送消费者(可选)

如果需要将消息推送到特定 URL,可以配置推送消费者:

  1. 创建推送订阅:在 Pub/Sub 中创建一个推送类型的订阅。
  2. 配置终端 URL:设置消息推送到的 URL。

示例案例

实时数据分析:使用 Pub/Sub 从 IoT 设备收集数据,并实时分析用户行为。

  • 步骤

    1. IoT 设备向 Pub/Sub 主题发送数据。
    2. Dataflow 或 Cloud Function 从 Pub/Sub 订阅中接收数据。
    3. 数据被处理并存储到 BigQuery 中。

微服务架构:在微服务之间使用 Pub/Sub 进行解耦。

  • 步骤

    1. 服务 A 向 Pub/Sub 主题发送请求。
    2. 服务 B 从 Pub/Sub 订阅中接收请求并处理。
    3. 处理结果被返回给服务 A。

通过这些步骤,你可以利用 Pub/Sub 实现异步消息传递,提高系统的可扩展性和可靠性。

相关推荐
程序员小假10 分钟前
我们来说说 ThreadLocal 的原理,使用场景及内存泄漏问题
java·后端
何中应12 分钟前
LinkedHashMap使用
java·后端·缓存
NetCrossPlatform25 分钟前
MAUI库推荐二:MPowerKit
后端
风的归宿5537 分钟前
进程调度:深入Linux内核架构读书笔记
后端
代码扳手41 分钟前
Go 微服务数据库实现全解析:读写分离、缓存防护与生产级优化实战
数据库·后端·go
于是我说42 分钟前
一份Python 面试常见问题清单 覆盖从初级到高级
开发语言·python·面试
Charlie_Byte1 小时前
Netty + Sa-Token 实现 WebSocket 握手认证
java·后端
多云的夏天1 小时前
SpringBoot3+Vue3基础框架(1)-springboot+对接数据库表登录
数据库·spring boot·后端
shoubepatien1 小时前
JAVA -- 12
java·后端·intellij-idea
木木一直在哭泣1 小时前
Spring 里的过滤器(Filter)和拦截器(Interceptor)到底啥区别?
后端