云功能计时器

时间:2018-02-17 17:19:32

标签: firebase google-cloud-functions

我需要创建一个云功能,启动一个在X分钟后调用另一个云功能的计时器。它应该重复N次,除非它被告知在N到达之前停止。这可能吗?我一直在读你只能使用外部cron作业或app引擎设置定时器?是否有可能做我想做的事情?是否有与此相关的费用?

1 个答案:

答案 0 :(得分:4)

云功能没有内置功能。您必须在云功能之上构建一些东西。

  1. 以每分钟运行的cron job开头。
  2. 现在在数据库中构建一个回调队列,例如Firebase实时数据库。队列中的每个项目都包含(至少)需要调用的Cloud Function的URL,以及需要调用它的时间戳。
  3. 每次要安排回调时,都要将任务写入队列。 E.g。

    queueRef.push({ timestamp: Date.now() + 5*60*1000, url: "https://mycloudfunctionsurlwithoptionalparameters" });
    
  4. cron作业触发的功能会检查队列中是否存在之前要触发的项目:

    queueRef.orderByChild("timestamp").endAt(Date.now()).once("value").then(function(snapshot) {
      snapshot.forEach(function(child) {
        var url = child.val().url;
        fetch(url).then(function() {
          queueRef.child(child.key).remove();
        });
      });
    });
    

    因此,此函数调用指定的URL(使用fetch),如果调用成功,则从队列中删除该条目。