GCloud Pub/Sub 推送订阅:限制最大未完成消息数

Kev*_*ott 6 google-cloud-platform google-cloud-pubsub

有没有办法在推送订阅配置中限制未完成消息的最大数量。在高级订阅者文档 ( https://cloud.google.com/pubsub/docs/push ) 中,它说“使用慢启动,Google Cloud Pub/Sub 通过一次发送一条消息开始,然后加倍每次成功传递,直到达到最大并发消息数。” 我希望能够限制正在处理的最大消息数,这可以通过发布/订阅配置完成吗?

我还想到了许多其他方法来有效地实现这一目标,但似乎都不是很好:

  • 是否在我的推送端点中实现了一些信号量类型系统,一旦达到我的最大并发级别就会返回 429?

  • 类似,但让它注销推送端点(将其转换为拉订阅),直到处理完当前消息

我的推送端点都在 gae 上,所以 gae 配置中也可能有一些东西来限制同时推送订阅请求?

Kam*_*osn 2

推送订阅不提供任何方法来限制未完成消息的数量。如果想要这种程度的控制,就必须使用请求订阅流量控制

返回 429 错误作为限制未完成消息的方法可能会产生不良副作用。如果出现错误,Cloud Pub/Sub 将降低向推送订阅者发送消息的速率。如果返回足够数量的 429 错误,则订阅者完全有可能收到的消息数量少于其在一段时间内可以处理的消息数量,同时 Cloud Pub/Sub 会回升传送速率。

从推式切换到拉式是一种可能性,尽管仍然可能不是一个好的解决方案。这实际上取决于推送订阅者超过所需未完成消息数量的频率。推拉和返回之间的变化可能不会立即发生,这意味着订阅者仍然可能在一段时间内超出所需的限制,并且在切换回推订阅者时还可能在接收新消息时遇到延迟。