如何以编程方式在Firebase中创建cron作业

时间:2019-05-10 09:04:09

标签: firebase google-cloud-platform google-cloud-firestore google-cloud-functions scheduled-tasks

我在这里有一个独特的问题。我实际上需要安排一个任务,在特定时间向符合条件的用户发送电子邮件。我检查发现,安排cron作业可以解决问题。但是,就我而言,我需要根据特定用户何时满足某些条件,以编程方式安排这些任务。

这是我的情况

  1. 我正在我的应用程序中运行引荐广告系列,其中引荐最多5个人的用户可以获得折扣订阅

  2. 用户推荐了5个人后,只要他在24小时内付款,就可以大幅降低订阅费用。否则,费用将恢复为原始值

  3. 我正在使用Firebase云功能在特定时间向合格的用户发送提醒电子邮件提醒,以便在24小时之前付款

现在是问题

  1. 我想在特定时间发送提醒电子邮件,例如他提到5个人时,剩余时间例如3小时等。

  2. 如果我不考虑用户而只计划一个功能,则可能必须定期设置cron作业(例如1分钟),以始终检查数据库中的用户是否符合条件,然后向他们发送电子邮件。这就构成了一个严重的问题,无论是否有合格的用户,都将运行云功能。

  3. 另一个问题是,通过上述实现,我无法在特定/确切的时间向用户发送电子邮件,除非我将任务安排为大约每1秒钟,这当然会价格飞涨,因为云功能将在每天高达86400次(86400秒)

我建议的解决方案

  1. 我只需要一种动态安排cron任务的方法,这样我就可以为特定用户安排工作。这将解决许多问题,例如在特定时间发送电子邮件,阻止云功能在不必要时运行,为不同用户设置不同电子邮件发送时间等功能

  2. 我计划使用带有用户ID请求参数的http触发器来安排任务,以便Firebase可以使用该ID将任务分配给特定用户,即每个合格用户都将拥有自己的http触发器

请问有没有一种方法可以解决我的问题?

1 个答案:

答案 0 :(得分:0)

与其尝试动态创建预定功能,不如考虑使单个功能按固定的时间表运行,然后在该功能内实现计时逻辑。

因此,与其说“我需要安排一个从现在开始运行3小时并向这5个人发送消息的函数”,不如说它是可以写入数据库的任务:“在x:yz send发送给这5个人的电子邮件”,然后使用定期的Cloud Function(云功能)检查其需要执行的任务。

另请参见Delay Google Cloud FunctionHow to use scheduler for Firebase Cloud Functions with Realtime Database/Analytics triggers?

或者,您可以使用Cloud Scheduler为要执行的特定操作创建任务,然后通过PubSub将其发布到Cloud Functions。