如何从云函数调用其他云Firebase函数

9
假设我有一个由定时作业调用的Cloud Firebase Function,每次被调用时会产生30多个任务。
这些任务相当缓慢(平均每个任务需要5-6秒),我不能直接在原始函数中处理它们,否则会超时。
因此,解决方案是调用另一个“工作”函数,每个任务调用一次,独立完成任务并将结果写入数据库。到目前为止,我能想到三种策略:
  1. 发布订阅消息。那将是很棒的,但似乎您只能从Cloud Function内部监听pubsub消息,而不能创建一个。我不想使用外部解决方案,比如拥有GAE实例。

  2. 从第一个函数调用http触发的Firebase Cloud Function。我认为这行不通,因为我需要等待所有被调用的工作函数完成并发送后的响应,否则我的原始Function会超时。

  3. 将任务附加到实时数据库列表,然后由每个数据库更改触发工作函数。工人必须随后从队列中删除任务。那可能会起作用,但感觉有很多移动部分来解决一个简单的问题。例如,如果工人抛出异常怎么办?另一个计划任务来“清理”数据库将是必要的等等。

另一个想到的解决方案是firebase-queue,但它的README明确指出:

“firebase-queue”可能仍然存在特定的用例,但如果您正在寻找Firebase的通用、可扩展的队列系统,那么在Google Cloud Functions for Firebase之上构建是最理想的路线。”这并不是官方支持的,他们实际上是在说我们应该使用Functions(这也是我正在尝试做的)。我有点担心在生产环境中使用可能明天就被放弃的库(如果它还没有被放弃),并希望避免走这条路。”
1个回答

8

从Cloud Functions发送Pub/Sub消息

Cloud Functions在一个相当标准的Node.js环境中运行。鉴于Node / NPM生态系统的广度,您可以在Cloud Functions中执行的操作非常广泛。

似乎只能从Cloud Function中监听pubsub消息,而不能创建pubsub消息

您可以使用常规的Node.js Pub/Sub模块从Cloud Functions向Pub/Sub主题发布新消息。请参阅Cloud Pub/Sub文档中的示例

通过数据库写入从Cloud Functions触发新动作

这也是一个相当常见的模式。我通常会让我的子进程/工作者在将其结果写回数据库的同时自我清理。在我的简单场景中,这很有效,但是您的情况可能会有所不同。

如果您遇到具体的清理问题,请发布复制问题的代码,我们可以研究使其更加健壮的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接