在 Google 函数中处理 Pubsub 消息

Handling Pubsub messages in Google Functions

我正在学习 Google 云函数,我正在将它们设置为由队列中的消息触发。我认为我真的没有掌握这里的一些概念,因为我有很多问题并且无法在任何地方找到答案。有很多解释函数和客户端的示例,但我还没有找到将两者合并的示例。

  1. 函数由主题而非订阅触发。这个很奇怪,因为一个主题可以有多个订阅,甚至每个订阅有多个订阅者,这意味着该函数不确认消息,因为它不知道要确认哪个消息。

  2. 基于第一个问题,当消息到达主题时,是否执行所有订阅者功能?那些正在做一些工作的函数呢?如果一个订阅有多个订阅者呢?

  3. 真正的拉式订阅甚至可以在函数中实现吗?这将意味着该功能会因为需要拉取项目而不断运行,这是代价高昂且错误的做法。

  4. 能否从函数中取消消息?似乎这些函数只有在允许重试的情况下部署时才会重试,但随后他们会尝试立即重新运行该函数,只要设置了重试期(默认为 7 天),这可能会导致极高的成本,如果一个函数是越野车,是一个完全废话模式。

所有这些让我认为:

  1. 从订阅中触发函数并让订阅能够确认/拒绝它们比听主题要好得多

  2. 我应该选择推送订阅和 HTTP 功能,这似乎更可控(我可能错了,没试过)

任何人都可以阐明这一点吗?我能否通过该函数轻松控制消息?如果消息被拒绝或重新发送,我能否期望该函数重新运行?

  1. 也许关键的信息是,当您将 Cloud Pub/Sub 主题挂钩到 Cloud Function 时,系统会创建一个推送订阅,以便将消息发送到那个云函数。

  2. 您绑定到主题的每个云功能都将有自己的订阅,并将接收发布到该主题的所有消息。如果函数的一个实例已经在工作,那么可以创建另一个实例来处理负载(或者将在已经 运行ning 的实例之间进行负载平衡)。推送订阅实际上并没有针对同一订阅的多个订阅者的概念。从 Cloud Pub/Sub 的角度来看,只有一个端点可以向其推送消息。 Cloud Functions 接收这些消息并将它们分发到服务正在 运行ning.

  3. 的 Function 实例中
  4. 将请求订阅作为 Cloud Functions 来实现会非常困难。您需要一个触发器来启动该函数,并且它必须在分配给它的时间内完成所有工作 运行.

  5. 听起来您想在重试消息时退避。目前不支持该功能,但我们知道该限制并希望尽快在此处进行改进。