我将Google App Engine标准(Php)与任务队列结合使用,以处理通过Amazon Simple Email Service(SES)为15,000条收件人发送的一封邮件的电子邮件。 SES施加了每秒14条消息的速率限制,这是我目前可以获得的最大速率。
我正在尝试配置我的app.yaml和queue.yaml文件,以在不超出速率限制的情况下最大程度地提高向所有收件人广播单个电子邮件的速度。
我有一个处理程序设置,可以计算每封邮件的收件人,然后将每个收件人的任务推送到另一个对邮件进行个性化处理的处理程序,并使用SES API将其发送。我需要一些有关用作缩放参数,最大并发请求数,存储桶大小和速率的指南。据我了解,这并不像将任务队列的处理速度设置为14 / s那样简单。
答案 0 :(得分:3)
我只是将第一个处理程序调整为:
countdown
1秒的时间进入另一个自身的实例,或者,甚至更严格的“打包”,在开始执行后的1秒内以ETA恰好进入队列 li>
在下一次调用时(至少1秒后),它将用ETA等方式排队另外14个任务和它本身的另一个实例,直到没有其他地址可发送。例如,也许使用带有游标的查询在每次调用时获得那14个地址。
我将对两种任务使用相同的队列,以确保在其前任实例开始处理所有14个个性化和发送任务之前,绝不处理主处理程序任务。
使用这种方法,您不需要非常精确的队列配置-方案本身应保证满足SES最大速率要求,它只需要配置一个最低速率即可使方案起作用。
值得注意的是,对于任务失败/重试,应该格外小心。由于您已经以最大速率发送,因此任何此类重试都将导致超出最大SES速率。因此,要禁用此类重试,需要跟踪发送失败的地址,并在主要发送序列完成后进行处理。