如何每30秒在服务器请求URL触发Google Cloud Function?
实现每30秒触发Google Cloud Function的方案
方案一:创建两个Cloud Scheduler定时作业(最可靠)
Google Cloud Scheduler支持包含秒的6字段cron表达式(格式:秒 分 时 日 月 周),完全可以实现每30秒触发一次:
- 第一个作业:设置cron表达式为
0 * * * * *,触发你的Cloud Function URL - 第二个作业:设置cron表达式为
30 * * * * *,同样触发同一个URL
两个作业会分别在每分钟的0秒和30秒执行,刚好满足每30秒一次的需求,而且每个作业独立运行,可靠性更高——就算其中一个偶尔失败,另一个仍能正常触发。
方案二:用中间Cloud Function实现单次触发两次调用
如果不想维护两个定时作业,可以创建一个中间的Cloud Function,让Cloud Scheduler每分钟触发一次这个中间函数,由它完成两次目标函数的调用:
- 创建新的Cloud Function,设置为HTTP触发器(让Cloud Scheduler通过HTTP调用它)
- 在中间函数的代码里,先调用目标Cloud Function的URL,sleep30秒后再调用一次。以Python为例:
import requests import time import os TARGET_URL = os.environ.get("TARGET_FUNCTION_URL") def trigger_target(request): # 第一次调用目标函数 requests.get(TARGET_URL) # 等待30秒 time.sleep(30) # 第二次调用目标函数 requests.get(TARGET_URL) return "OK"
- 在Cloud Scheduler里创建一个每分钟触发的作业(cron表达式
* * * * *),触发这个中间函数的URL
注意:要给中间函数设置足够的超时时间(默认90秒足够,sleep30秒+两次HTTP调用耗时不会超过),同时确保中间函数有访问目标函数URL的权限(比如目标函数需要身份验证的话,中间函数要带上对应的认证信息)。这个方案的缺点是如果中间函数执行出错,会漏掉一次目标函数的调用,可靠性不如方案一。
内容的提问来源于stack exchange,提问作者Benjamin2002
相关产品推荐
相关产品推荐

