我的应用引擎应用程序接收来自SendGrid的通知,用于处理电子邮件递送,打开等.Sendgrid不会对这些通知进行大量批处理,因此我可以每秒收到几个。
我想对收到的通知进行批量处理,例如处理最后一分钟收到的所有通知(我的处理包括交易,所以我需要将它们合并以避免争用)。似乎有几种方法可以做到这一点......
为了存储收到的通知,我可以:
对于触发处理,我可以:
我喜欢听到上述或其他方法的利弊。
答案 0 :(得分:0)
几天后,我提出了一个非常好的实施方案。
为了存储传入通知,我将数据存储在提取队列任务中。在我的问题发生时我还不知道你可以在任务中存储你想要的任何原始数据,而且任务本身并不是函数的执行。您可能可以将传入的数据存储在数据存储区中,但是您可以创建自己的拉取任务,这样您就可以获得GAE提供的拉取任务。
为了触发工作人员处理拉取队列中的任务,我遇到了一篇前GAE开发人员关于On-demand Cron Jobs的优秀博客文章。我不想在这里重复整篇文章,但基本思路是每次向拉取队列添加任务时,都会创建一个工作任务(常规推送队列)来处理拉取队列中的任务。对于worker任务,添加与时间间隔对应的任务名称,以确保在该时间间隔内只有一个worker任务。它允许您获得1分钟CRON作业的好处,但增加的性能奖励仅在需要时运行,因此您不需要在不需要时运行CRON作业。