https://cloud.google.com/pubsub?hl=en_us
AI:Google Cloud 的托管消息队列/事件总线,让发布者(Publisher)把消息发到 Topic,订阅者(Subscriber)通过 Subscription 异步接收。Pub/Sub 是一条事件高速路:发布者把消息丢到一个主题(Topic),系统把它投递到一个或多个订阅(Subscription),由订阅者(Subscriber)取走处理。
大概是一个队列

linux_gcp_pubsub_overall.xml.txt
每个消息都完整地传递到每一个 Subscriptions
每一个 Subscriptions 的其中,有且只有一个 Worker 收到并处理了消息
Topic T ├─ Subscription S1 ──> Worker A, Worker B, Worker C (同一个订阅里的多个“订阅者实例”) └─ Subscription S2 ──> Worker X (另一个订阅)
每条消息在 S1 内只会被一个 Worker 处理一次(A 或 B 或 C 其中之一)。
用语:这是在一个订阅“队列”里做分摊/负载均衡。
若处理失败未 ACK,消息会在 S1 内重投,可能换到别的 Worker 再试。
同一条消息会被复制到 S1 和 S2 各自的队列里。
所以 S1 处理一份,S2 也处理一份,互不影响。
一定要在本地先配置好 ADC 之后才能运行,参考gcloud CLI
https://github.com/GZhonghui/GCP/tree/master/pub_sub/python
可以在网页端查看现有的消息:
参考gcloud CLI,先配置好权限
# 以下命令暂未验证 # 列 Pub/Sub 主题 gcloud pubsub topics list # 列当前项目所有订阅(带完整路径) gcloud pubsub subscriptions list --format="value(name)" # 只想看短名 gcloud pubsub subscriptions list --format="value(name.basename())" # 创建 topics 和 subscriptions gcloud pubsub topics create my-topic gcloud pubsub subscriptions create my-sub --topic=my-topic # 发布消息 gcloud pubsub topics publish my-topic --message="hello" --attribute=env=dev gcloud pubsub topics publish YOUR_TOPIC --message="hello ADC" \ --attributes=foo=bar,lang=zh # 拉取消息 gcloud pubsub subscriptions pull my-sub --auto-ack --limit=10