我应该一次还是定期创建 Push PubSub 订阅?

Should I create Push PubSub Subscription once or periodically?

我正在实施一个使用 PubSub 主题摄取数据的队列。 我的计划是使用推送订阅来在数据发布时立即对其进行处理。

当使用 Pull Sub 时,我看到很多代码模式试图在每个 运行 中重新创建 Pull Subscription 保证我们在下一个 pull 周期中有一个活动订阅。

我应该使用推送订阅来做同样的事情吗?恕我直言,不,但我担心推送订阅在某种程度上不是永恒的,应该受到监控以保证下次发布消息时推送订阅处于活动状态。

创建推送订阅的好的设计模式是什么? 我应该使用 PubSub 管理界面创建一次推送订阅还是以编程方式创建(甚至重新创建)?

订阅者倾向于在启动时重新创建代码的原因可能围绕着这样一个事实:如果 30 天内未检测到订阅者的存在,订阅将被垃圾收集(请参阅 Google Cloud Pub/Sub FAQ 中的 "Are messages durable or persistent if the subscriber is not present?" . 此外,如果拉取订阅被显式删除,则在代码启动时重新创建它可确保拉取请求不会失败。对于拉取订阅者,检测存在的概念非常简单:检查对拉取的调用。

对于推送订阅者,它有点模糊。如果要删除订阅,订阅者自己将无法知道它已被删除;它只会停止接收消息。如果您确定不会手动删除订阅并且每 30 天至少发送一条消息,则无需担心在启动时创建订阅,只需通过 Pub/Sub 管理创建一次即可接口.

如果您想确定地发出警报,您可以 create a policy in Stackdriver 通知您的订阅在一段时间内没有推送任何消息(假设您发布了相当稳定的流消息) .为 "Metric Absence" 添加条件并选择 "Cloud Pub/Sub Subscription" 作为资源类型、订阅名称,并选择 "Push Request Count" 作为触发指标。