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

这是我的场景

  • 我正在我的应用程序中运行推荐事件,推荐最多 5 人的用户可以获得折扣订阅
  • 用户推荐5人后,只要在24小时内付款,订阅费用将大幅下降。否则成本返回原始值
  • 我正在使用 firebase 云功能在特定时间向符合条件的用户发送提醒电子邮件提醒,以便在 24 小时过去之前付款

  • 现在的问题
  • 我想在特定时间发送提醒邮件,比如他推荐 5 个人后,他的时间还剩 3 小时等等。
  • 如果我只安排一个函数而不考虑用户,我可能必须定期设置 cron 作业,比如 1 分钟,以始终检查我的数据库中的用户是否符合条件,然后向他们发送电子邮件。这带来了严重的问题,无论是否有合格的用户,云功能都会运行。
  • 另一个问题是,通过上述实现,我无法在特定/确切时间向用户发送电子邮件,除非我每 1 秒安排一次任务,这当然会飞涨,因为云函数将被调用大约 86400 次(86400秒)一天

  • 我提出的解决方案
  • 我只需要一种动态安排 cron 任务的方法,以便我可以为特定用户安排作业。这将解决许多问题,例如在特定时间发送电子邮件、防止云功能在不必要时运行、能够为不同用户设置不同的电子邮件发送时间等
  • 我计划使用带有用户 ID 请求参数的 http 触发器来调度任务,以便 firebase 可以使用此 ID 将任务仅分配给特定用户,即每个符合条件的用户都有自己的 http 触发器

  • 请问有没有办法为我的案例实现这个或任何其他好的解决方案?

    最佳答案

    与其尝试动态创建计划函数,不如考虑让单个函数按固定计划运行,然后在该函数内部实现计时逻辑。

    因此,与其说“我需要安排一个从现在起运行 3 小时后向这 5 个人发送消息的函数”,而是将其视为可以写入数据库的任务:“在 x:yz 发送电子邮件至这 5 个人”,然后有一个定期的云功能来检查它需要执行哪些任务。

    另见 Delay Google Cloud Function , How to use scheduler for Firebase Cloud Functions with Realtime Database/Analytics triggers?

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

    作为更新的替代方案:使用具有 API 的单独调度程序服务来创建调度,例如 Cloud Tasks。 Doug 在 How to schedule a Cloud Function to run in the future with Cloud Tasks (to build a Firestore document TTL) 中写了一篇很棒的文章。

    关于firebase - 如何以编程方式在 firebase 中创建 cron 作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56074188/

    10-16 18:59