如何从云功能

时间:2017-08-16 12:34:43

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

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

这些任务非常缓慢(平均每次5到6秒),我无法直接处理它们,因为它会超时。

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

  1. Pubsub消息。这将是惊人的,但它似乎you can only listen on pubsub messages from within a Cloud Function,而不是创建一个。求助于外部解决方案,例如拥有GAE实例,对我来说不是一个选择。

  2. 从第一个调用工作人员http触发的Firebase云功能。我认为这不会起作用,因为我需要等待所有被调用的工作函数的响应,在它们完成后send,并且我的原始函数将超时。

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

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

      

    “firebase-queue可能会继续存在特定的用例,   但是,如果您正在寻找通用的,可扩展的排队   Firebase的系统很可能建立在Google之上   Firebase的云功能是理想的路线“

    它没有得到官方支持,他们实际上说我们应该使用函数(这是我正在尝试做的)。我有点紧张使用可能会在明天放弃的图书馆(如果还没有),并且希望避免沿着这条路走下去。

1 个答案:

答案 0 :(得分:7)

从云功能发送发布/订阅消息

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

  

您似乎只能在Cloud Function中侦听pubsub消息,而不是创建一个

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

从云功能到数据库写入触发新操作

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

如果你有一个具体的清理问题,请发布重现问题的代码,我们可以看看如何使其更加健壮。