正在为Firebase Cloud Functions中的每个用户运行调度程序?

问题描述 投票:0回答:2

我希望运行根据我的云功能中的每个用户运行的调度程序,而不是针对所有用户同时运行的通用调度程序。

例如,如果用户A执行特定操作,则仅针对用户A而非其他用户启动调度程序(例如,每30分钟启动一次)。但是,然后UserB也执行相同的操作,并在不同的时间为自己启动调度程序。

现在UserA和UserB的调度程序可以在不同的时间运行,但间隔相同(30分钟)

如何创建这样的功能?帮助将不胜感激。

firebase google-cloud-functions react-native-firebase
2个回答
1
投票

仅Cloud Functions不能为每个用户独立调度功能执行。您只能按照功能配置中提供的时间表来安排单个功能。显然,它无法扩展为每个用户部署新功能。

您有两种选择:

  1. 部署一个scheduled function,它运行得尽可能频繁(每1分钟)。让它查询数据库以确定每个用户需要运行哪些工作,并安排它们执行。根据工作量,您可能希望通过pubsub将其卸载到其他函数调用中。

  2. 在每个用户的基础上,使用Cloud Tasks安排应为用户完成的第一项工作(可以实现为调用HTTP触发器)。任务的有效负载应描述要完成的工作(至少应包含其代表的用户的ID)。当该任务完成时,HTTP触发器将必须确定下一次定期调用的时间,并照此计划它。您实际上将在队列“挂起”执行中始终有一个任务。如果您的功能因某种原因无法建立下一个任务,则周期性将中断,您将必须以某种方式找出如何再次启动它。

选项1易于实施,IMO,但是如果调用需要在每分钟的确切时间精确进行,则您将失去时序的粒度。您还需要维护一个数据库或其他商店以进行查询,以弄清楚如何告诉每分钟功能应为任何给定用户做更多的工作。

选项2很难正确实现,需要使用带有新API的全新产品,但是您可以安排更精细的任务。


1
投票

[您似乎正在寻找Cloud Tasks,我写了post about it,也许会对您有所帮助

使用云任务,您基本上可以设置一个流程来运行给定时间并管理所需的任何功能。

UPDATE:

云任务允许您传递有效负载,可根据需要使用该负载来计算任何后续任务,一些策略如下:

  • 创建(例如)创建30个薄荷糖(或所需间隔)的N个任务。
  • 仅创建一个任务,并在执行期间决定是否需要创建其他任务。

这是我根据您提供的信息开始的初始策略。

© www.soinside.com 2019 - 2024. All rights reserved.