如何从 Cloud Function 调用其他 Cloud Firebase Functions
Posted
技术标签:
【中文标题】如何从 Cloud Function 调用其他 Cloud Firebase Functions【英文标题】:How to invoke other Cloud Firebase Functions from a Cloud Function 【发布时间】:2018-01-24 14:30:27 【问题描述】:假设我有一个 Cloud Firebase Function - 由一个 cron 作业调用 - 每次调用它都会产生 30 多个任务。
这些任务非常慢(平均每个 5 - 6 秒),我无法直接在原始文件中处理它们,因为它会超时。
因此,解决方案将调用另一个“工作者”函数,每个任务一次,以独立完成任务并将结果写入数据库。到目前为止,我能想到三种策略:
发布订阅消息。那将是惊人的,但似乎you can only listen on pubsub messages from within a Cloud Function,而不是创建一个。诉诸外部解决方案,例如拥有 GAE 实例,对我来说不是一个选择。
从第一个调用工作程序 http 触发的 Firebase 云函数。我认为那是行不通的,因为我需要等待所有调用的工作函数的响应,在它们完成和send
之后,我原来的函数会超时。
将任务附加到实时数据库列表中,然后由每个数据库更改触发一个工作函数。工作人员之后必须从队列中删除任务。这可能会奏效,但感觉一个简单的问题有很多活动部件。例如,如果工人扔东西怎么办?需要另一个 cron 来“清理”数据库等。
想到的另一个解决方案是firebase-queue,但它的自述文件明确指出:
“firebase-queue 可能还会有特定的用例, 但是,如果您正在寻找通用、可扩展的队列 Firebase 系统,那么它很可能建立在 Google 之上 Cloud Functions for Firebase 是理想的途径”
它没有得到官方支持,他们实际上是在说我们应该使用函数来代替(这是我正在尝试做的)。我对在 prod 中使用明天可能会被放弃的库(如果还没有的话)有点紧张,并且希望避免走这条路。
【问题讨论】:
【参考方案1】:从 Cloud Functions 发送 Pub/Sub 消息
Cloud Functions 在相当标准的 Node.js 环境中运行。鉴于 Node/NPM 生态系统的广度,您可以在 Cloud Functions 中做的事情非常广泛。
您似乎只能在 Cloud Function 中收听 pubsub 消息,而不能创建一个
您可以使用用于 Pub/Sub 的常规 Node.js 模块从 Cloud Functions 中将新消息发布到 Pub/Sub 主题。请参阅Cloud Pub/Sub documentation for an example。
通过数据库写入从 Cloud Functions 触发新操作
这也是一种相当普遍的模式。我通常让我的子进程/工作人员在他们将结果写回数据库的同时自行清理。这在我的简单场景中运行良好,但您的里程当然可能会有所不同。
如果您遇到具体的清理问题,请发布重现该问题的代码,我们可以看看如何使其更健壮。
【讨论】:
太棒了!谢谢。以上是关于如何从 Cloud Function 调用其他 Cloud Firebase Functions的主要内容,如果未能解决你的问题,请参考以下文章
无法从 GCP 调度程序调用 Google Cloud Function
从 Firebase Cloud Function 调用 Google Books API 时出现 HttpsError
如何从Google Cloud Function(Cheerio,Node.js)发出多个http请求
从 App Engine 运行时 Python 3.7 调用 Cloud Function [重复]