【发布时间】:2017-01-16 19:31:30
【问题描述】:
对于消息数量在 ~100k 范围内的 pubsub 主题,使用 gcloud-java SDK 排出/丢弃/清除/删除所有消息的最佳做法是什么?
可能的解决方案:
删除并重新创建订阅者,然后是发布者
高并发pull+ack(这样容易达到配额)
- 别的东西
我希望这个过程可以快速(例如不超过 60 秒)、健壮,并使用支持的 SDK 方法和最少的其他代码。
【问题讨论】:
对于消息数量在 ~100k 范围内的 pubsub 主题,使用 gcloud-java SDK 排出/丢弃/清除/删除所有消息的最佳做法是什么?
可能的解决方案:
删除并重新创建订阅者,然后是发布者
高并发pull+ack(这样容易达到配额)
我希望这个过程可以快速(例如不超过 60 秒)、健壮,并使用支持的 SDK 方法和最少的其他代码。
【问题讨论】:
更新快照和搜索功能的描述: 可以在 Pub/Sub 订阅上使用 seek 通过寻找与现在对应的时间戳来确认较旧的消息。最好的方法是通过gcloud command line tool。确认发布到特定时间戳的消息的命令是:
gcloud pubsub subscriptions seek <subscription path> --time=yyyy-mm-ddThh:mm:ss
删除到目前为止的所有消息:
gcloud pubsub subscriptions seek <subscription path> --time=$(date +%Y-%m-%dT%H:%M:%S)
添加快照和搜索之前的上一个答案: 目前,Google Cloud Pub/Sub 无法清除旧消息,但我们正在寻求添加。在时间和成本方面,删除和重新创建订阅将是清除它的最有效方式。您不必与您的出版商做任何事情;重新创建后从该点发布的任何消息都将发送给重新创建的订阅上的订阅者。
【讨论】:
gcloud beta pubsub subscriptions seek testSubscription --time=$(date +%Y-%m-%dT%H:%M:%S)