【问题标题】:How to identify reason of OverQuotaError when sending emails?发送电子邮件时如何识别 Over Quota Error 的原因?
【发布时间】:2014-06-02 13:34:40
【问题描述】:

我发送包含 cron 作业和任务队列使用情况的电子邮件。该作业每 15 分钟执行一次,使用的队列具有以下设置:

- name: send-emails
  rate: 1/m
  max_concurrent_requests: 1
  retry_parameters:
    task_retry_limit: 0 

apiproxy_errors.OverQuotaError 异常经常发生。我正在检查配额详细信息,发现我仍在每日配额范围内(通过电子邮件发送的收件人、发送的附件数据等),并且我相信我不能超过 maximum per minute limit,因为我使用的速率仅为每个任务 1 个分钟(即每分钟发送不超过 1 封邮件)。

我哪里错了,我应该检查什么?

【问题讨论】:

  • 队列最多可以包含 100 条消息。但一项任务仅用于发送 1 封电子邮件。但是,在检查日志时,我看到2014-06-02 18:43:46.5142014-06-02 18:44:14.952014-06-02 18:44:16.858,这更常见,然后是每分钟 1 个任务(我对 rate: 1/m 的预期)。
  • @GAEfan,看起来我应该将bucket_size 定义为等于1 以便正确使用rate,对吧?
  • 你为什么设置这么低的速率和桶大小?您是否每 15 分钟只发送一封电子邮件?另外,您是否使用.add(queue_name="send-emails") 设置了任务队列名称
  • 当队列中有很多任务并且速率很高时,桶大小限制了队列的处理速度。这使您可以拥有高速率,因此在任务入队后不久就开始处理,但在短时间内将许多任务入队时仍会限制资源使用。如果队列没有指定 ,则默认值为 5。
  • 是的,如果您只想每分钟发送一封电子邮件,则需要更改存储桶大小。 rate 不是发送电子邮件的速率;它是桶被补充的速率。因此,按照您的方式,您每 1 分钟发送一桶 5 封(默认为 bucket-size)电子邮件

标签: google-app-engine email cron task-queue


【解决方案1】:

您要发送多少封电子邮件?您尚未设置bucket-size,因此默认为 5。您的rate 设置存储桶的补充频率。因此,使用您当前的配置,您每分钟可以发送 5 封电子邮件。这意味着,如果您每 15 分钟向队列发送超过 75 封电子邮件,队列将被填满,并最终超出配额。

【讨论】:

    【解决方案2】:

    我自己没有尝试过,但是当您捕获 apiproxy_errors.OverQuotaError 异常时,该消息是否包含有关它为何超出配额/已超出哪个配额的任何详细信息?

    try:
        send_mail_here
    except apiproxy_errors.OverQuotaError, message:
        logging.error(message)
    

    【讨论】:

    • 这正是我捕获异常的方式。该消息显示The API call mail.Send() required more quota than is available,即没有详细信息。
    • 好的,所以例外可能会更有帮助。
    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2018-05-31
    相关资源
    最近更新 更多