谷歌发布/订阅控制RateLimit [英] Google Pub/Sub to control RateLimit
本文介绍了谷歌发布/订阅控制RateLimit的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我做了一个云函数来做以下事情:
- 在今天的前一天(大约400个ID)每晚一次获取订单ID的过滤器。
- 对于每个ID,从源获取详细信息。
- 对于每个详细信息,请从目标获取额外信息。
- 作为发票发送到目标。
我的问题在第2步。速率限制为每分钟14个请求。因此,我想创建一个介于1和2之间的发布/订阅。创建一个从主题中提取消息的订阅函数。处理其中的14条消息并确认这些消息,然后解析承诺。但这给我留下了一些问题:
- 这是正确的流程吗?
- 如何计划步骤2?
- 如果我收到429响应,我会等待1分钟(这将被收费)
- 是否让步骤2每隔1分钟运行一次,以不获得429响应代码?(这将在一天中没有消息的情况下运行很长时间。 不是让发布/订阅触发函数,而是检查响应代码-如果是429,则等待1分钟进行处理。但我的问题是:它会调用云函数的一个实例还是多个实例?
我希望有人能分享一些想法。我是云功能和异步编程的新手。我的洞功能可以正常工作,只限5个订单。就在后来,我遇到了这个速率限制(我知道,我太蠢了)。
推荐答案
我个人认为可以使用FiRestore来存储每个ID(文档ID)的进程状态。
我的意思是,第一个函数在FiRestore集合中创建(大约)400个文档--根据问题中的ID创建一个文档。然后,每个文档都可以用作给定文档处理的状态机和日志-从详细信息检索到发票生成和过帐...此外,第一个函数可以发送带有文档ID的发布订阅消息(到目前为止大约有400条消息)。
在发布订阅主题的另一边--还有第二个云函数。我会计算其并行运行的实例的最大数量,以最大限度地减少API速率异常,但如果收到异常-这不是问题。此函数执行实际工作,并在成功的情况下更新Firestore文档的状态(即完成),或在出现异常的情况下更新其他状态...
然后我们有一些调度程序(比方说15分钟一次、10分钟一次、20分钟一次--我不知道上下文)、pubSub主题和另一个云函数。此云函数(在收到调度程序的消息后)扫描FiRestore集合,并且对于处于"异常"状态的文档,将消息发送到第一个发布订阅(见上文),以便可以重新处理文档-这是一个自我修复过程... 流程、日志和流程(状态更新等)可以在FiRestore文档中收集,这样他们中的每个人都可以获得整个过程发生的时间...此外,我还会使用专用的堆栈驱动程序日志来监控它的运行情况(例如,如果每个时间单位的异常数量超过某个限制--它可能会导致警报触发)。日志消息应包含与FiRestore集合中的日志(和其他详细信息)或多或少类似的信息。
然后我将使用接收器进入BigQuery并拥有一些报告/仪表板(如果需要)...
最后,应该有一个自定义服务帐户来运行那些具有相关IAM角色的云功能,以便与GCP资源(pubSub、Firestore、StackDrive等)配合使用...
这篇关于谷歌发布/订阅控制RateLimit的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文