我希望运行根据我的云功能中的每个用户运行的调度程序,而不是针对所有用户同时运行的通用调度程序。
例如,如果用户A执行特定操作,则仅针对用户A而非其他用户启动调度程序(例如,每30分钟启动一次)。但是,然后UserB也执行相同的操作,并在不同的时间为自己启动调度程序。
现在UserA和UserB的调度程序可以在不同的时间运行,但间隔相同(30分钟)
如何创建这样的功能?帮助将不胜感激。
仅Cloud Functions不能为每个用户独立调度功能执行。您只能按照功能配置中提供的时间表来安排单个功能。显然,它无法扩展为每个用户部署新功能。
您有两种选择:
部署一个scheduled function,它运行得尽可能频繁(每1分钟)。让它查询数据库以确定每个用户需要运行哪些工作,并安排它们执行。根据工作量,您可能希望通过pubsub将其卸载到其他函数调用中。
在每个用户的基础上,使用Cloud Tasks安排应为用户完成的第一项工作(可以实现为调用HTTP触发器)。任务的有效负载应描述要完成的工作(至少应包含其代表的用户的ID)。当该任务完成时,HTTP触发器将必须确定下一次定期调用的时间,并照此计划它。您实际上将在队列“挂起”执行中始终有一个任务。如果您的功能因某种原因无法建立下一个任务,则周期性将中断,您将必须以某种方式找出如何再次启动它。
选项1易于实施,IMO,但是如果调用需要在每分钟的确切时间精确进行,则您将失去时序的粒度。您还需要维护一个数据库或其他商店以进行查询,以弄清楚如何告诉每分钟功能应为任何给定用户做更多的工作。
选项2很难正确实现,需要使用带有新API的全新产品,但是您可以安排更精细的任务。
[您似乎正在寻找Cloud Tasks,我写了post about it,也许会对您有所帮助
使用云任务,您基本上可以设置一个流程来运行给定时间并管理所需的任何功能。
UPDATE:
云任务允许您传递有效负载,可根据需要使用该负载来计算任何后续任务,一些策略如下:
这是我根据您提供的信息开始的初始策略。