jan*_*nce 4 firebase google-cloud-platform google-cloud-pubsub firebase-realtime-database google-cloud-functions
假设我有一个 Cloud Firebase函数 -由cron作业调用-每次调用时都会产生30多个任务。
这些任务很慢(平均每个任务5-6秒),我无法直接在原始任务中处理它们,因为它会超时。
因此,该解决方案将是为每个任务调用另一个“工作者”功能,以独立完成任务并将结果写入数据库中。到目前为止,我可以想到三种策略:
Pubsub消息。那真是太神奇了,但是似乎您只能从Cloud Function中监听pubsub消息,而不能创建一个。对我来说,诉诸外部解决方案(例如拥有GAE实例)不是一种选择。
从第一个调用工作者通过http触发的Firebase Cloud Function。我认为那是行不通的,因为我需要等待所有被调用的工作函数在完成和之后的响应send,并且我的原始函数会超时。
将任务追加到实时数据库列表中,然后具有由每次数据库更改触发的辅助函数。之后,工作人员必须从队列中删除任务。那可能会起作用,但是感觉到有很多活动部件可以解决一个简单的问题。例如,如果工人扔了怎么办?需要另一个cron来“清理”数据库,等等。
我想到的另一个解决方案是firebase-queue,但其自述文件明确指出:
“ Firebase队列可能还会有特定的用例,但是,如果您正在寻找通用的,可扩展的Firebase排队系统,那么在Google Cloud Functions for Firebase之上构建是理想的选择。”
它没有得到官方的支持,他们实际上是在说我们应该改用Function(这是我正在尝试的方法)。我对在产品库中使用可能会在明天(如果尚未废弃)的库有点担心,并希望避免沿这条路线走。
云功能在相当标准的Node.js环境中运行。鉴于节点/ NPM生态系统的广度,您在Cloud Functions中可以做的事情很多。
看来您只能在Cloud Function中监听pubsub消息,而不能创建一个
您可以使用常规的用于发布/订阅的Node.js模块,在Cloud Functions中将新消息发布到发布/订阅主题。有关示例,请参阅Cloud Pub / Sub文档。
这也是一个相当普遍的模式。通常,我会在将自己的结果写回到数据库的同时自行清理子流程/工作者。在我的简单情况下,这可以正常工作,但您的里程当然可能会有所不同。
如果您遇到了具体的清理问题,请发布可重现该问题的代码,我们可以研究使其更强大的方法。
| 归档时间: |
|
| 查看次数: |
1534 次 |
| 最近记录: |