GCP Pub/Sub 消息
全球消息 — 至少一次投递、排序、schema 注册和推/拉订阅。
GCP进阶
为什么
Pub/Sub 伸缩到百万消息/秒、全球、无 broker 管理。10GB/月免费。按键排序、schema 注册 Avro/Protobuf。推到 HTTP 端点或拉。
何时使用
事件流、异步工作、微服务通信时用。避免跨键严格排序(用排序键)或事务(用 Cloud Spanner)。
如何做
1. 主题 — gcloud pubsub topics create my-topic
2. 订阅 — 拉或推(HTTP 端点)
3. 发布 — gcloud pubsub topics publish my-topic --message "..."
4. 排序 — --ordering-key、同键消息有序
5. Schema — Avro/Protobuf、验证消息
6. 死信 — maxDeliveryAttempts、路由失败
7. 过滤 — 订阅过滤表达式、仅匹配消息
8. 精确一次 — 启用、按消息 ID 去重
示例
# 创建带排序的主题 + 订阅
gcloud pubsub topics create orders --ordering-key-order
gcloud pubsub subscriptions create order-processor \
--topic orders \
--enable-message-ordering \
--dead-letter-topic orders-dlq \
--max-delivery-attempts 10
// 用排序键发布
import { PubSub } from "@google-cloud/pubsub";
const pubsub = new PubSub();
await pubsub.topic("orders").publishMessage({
data: Buffer.from(JSON.stringify({ orderId: "456" })),
orderingKey: "user-123", // 此用户消息有序
});
// 拉订阅
const sub = pubsub.subscription("order-processor");
sub.on("message", (msg) => {
process(JSON.parse(msg.data.toString()));
msg.ack();
});
常见问题
- ⚠重复消息 — 至少一次、消费者幂等
- ⚠无全局排序 — 仅按排序键、相应设计
- ⚠背压 — 用流控、勿比处理快 ack
最佳实践
- ✓消费者幂等 — 至少一次意味重复、按 ID 去重
- ✓相关消息用排序键 — 每键保序、跨键并行
- ✓设死信主题 — 捕获失败、防无限重试
常见问题解答
什么是GCP Pub/Sub 消息?它解决什么问题?
全球消息 — 至少一次投递、排序、schema 注册和推/拉订阅。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。
如何在 5 分钟内上手GCP Pub/Sub 消息?
两步即可跑通:① 主题 — gcloud pubsub topics create my-topic;② 订阅 — 拉或推(HTTP 端点)。建议先用免费套餐验证流程,再接入生产环境。
GCP Pub/Sub 消息 最容易踩的坑是什么?
最高频的问题是:重复消息 — 至少一次、消费者幂等。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。
GCP Pub/Sub 消息 的最佳实践有哪些?
GCP Pub/Sub 消息 的最佳实践包括:消费者幂等 — 至少一次意味重复、按 ID 去重;相关消息用排序键 — 每键保序、跨键并行;设死信主题 — 捕获失败、防无限重试。其中首条「消费者幂等 — 至少一次意味重复、按 ID 去重」应作为团队默认规范写入 IaC 模板。
GCP Pub/Sub 消息 如何控制成本与避免账单意外?
三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。GCP Pub/Sub 消息 多数提供免费套餐,先在免费额度内验证再放量。