【问题标题】:How to invoke other Cloud Firebase Functions from a Cloud Function如何从 Cloud Function 调用其他 Cloud Firebase Functions
【发布时间】:2018-01-24 14:30:27
【问题描述】:

假设我有一个 Cloud Firebase Function - 由一个 cron 作业调用 - 每次调用它都会产生 30 多个任务。

这些任务非常慢(平均每个 5 - 6 秒),我无法直接在原始文件中处理它们,因为它会超时。

因此,解决方案将调用另一个“工作者”函数,每个任务一次,以独立完成任务并将结果写入数据库。到目前为止,我能想到三种策略:

  1. 发布订阅消息。那将是惊人的,但似乎you can only listen on pubsub messages from within a Cloud Function,而不是创建一个。诉诸外部解决方案,例如拥有 GAE 实例,对我来说不是一个选择。

  2. 从第一个调用工作程序 http 触发的 Firebase 云函数。我认为那是行不通的,因为我需要等待所有调用的工作函数的响应,在它们完成和send 之后,我原来的函数会超时。

  3. 将任务附加到实时数据库列表中,然后由每个数据库更改触发一个工作函数。工作人员之后必须从队列中删除任务。这可能会奏效,但感觉一个简单的问题有很多活动部件。例如,如果工人扔东西怎么办?需要另一个 cron 来“清理”数据库等。

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

“firebase-queue 可能还会有特定的用例, 但是,如果您正在寻找通用、可扩展的队列 Firebase 系统,那么它很可能建立在 Google 之上 Cloud Functions for Firebase 是理想的途径”

它没有得到官方支持,他们实际上是在说我们应该使用函数来代替(这是我正在尝试做的)。我对在 prod 中使用明天可能会被放弃的库(如果还没有的话)有点紧张,并且希望避免走这条路。

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-platform google-cloud-functions google-cloud-pubsub


    【解决方案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 触发新操作

    这也是一种相当普遍的模式。我通常让我的子进程/工作人员在他们将结果写回数据库的同时自行清理。这在我的简单场景中运行良好,但您的里程当然可能会有所不同。

    如果您遇到具体的清理问题,请发布重现该问题的代码,我们可以看看如何使其更健壮。

    【讨论】:

    • 太棒了!谢谢。
    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2021-06-30
    • 2020-05-23
    • 2019-07-26
    • 2021-10-25
    相关资源
    最近更新 更多