Google App Engine - это очередь задач решение для QuotaExceededException? - PullRequest
1 голос
/ 07 января 2010

У меня есть код Google App Engine, который пытается отправить письмо с вложением размером 379 КБ. У почты есть два получателя - один в списке «Кому» и я в списке «BCC». По-видимому, GAE рассматривает это как 2 разных письма, что делает попытку отправки писем с размером вложения 758 КБ (379 * 2) и приводит к исключению QuotaExceededException, так как оно превышает квоту в минуту на 500 нечетных КБ / минуту. Пока почта достигает получателя из списка «Кому», почта, находящаяся на СК (я), не получает почту.

Может ли служба очереди задач рассматриваться для решения этой проблемы? будет ли структура очереди задач повторять передачу почты получателям, которые не получали почту при возникновении исключения QuotaExceededException?

Далее, я планирую расширить вышеупомянутый код таким образом, чтобы он отправлял одну и ту же почту (с вложением) нескольким пользователям. Это приведет к возникновению QuotaExceededException, если будет предпринята попытка передачи всем получателям без промежутка времени. Может ли служба очереди задач помочь мне в этом случае?

Ответы [ 2 ]

5 голосов
/ 07 января 2010

Я думаю, что Task Queues хорошо бы охватил этот вариант использования. Фактически, пример, который Google использует в своей документации по очередям задач , - это пример, когда электронные письма отправляются через них.

Две вещи для размышления:

  1. Google перечисляет очереди задач как экспериментальная особенность, которая может быть может быть изменено в будущем релизы, так что если вы используете это для производственного кода, будьте готовы к поведение вашего приложения изменить внезапно и без предупреждения.
  2. Вам нужно будет настроить свою очередь такой, что он не обрабатывает электронные письма быстрее, чем они могут быть отправлены без нарушая ваши квоты. Проверьте Концепции очереди в документации.

Наконец, вы рассматривали возможность размещения этого большого вложения в качестве URL-адреса, и чтобы в письме содержалась ссылка на него? Это сделало бы отправку электронных писем намного проще, и это было бы более благосклонно к вашему общему потреблению пропускной способности, поскольку только получатели, которые действительно хотели бы это, получили бы это.

2 голосов
/ 08 января 2010

Почти. Очередь задач будет повторять действие до тех пор, пока оно не выполнится успешно, но при этом будет повторена вся задача. AFAIK он ничего не знает или помнит о частичном успехе. Поэтому, если вы просто выполняете свое текущее действие (отправка двум получателям) в качестве задачи, я подозреваю, что с получателем в поле «Кому» будут происходить плохие вещи, поскольку задача продолжает посылать им электронную почту, но в целом не выполняется, раз в минуту, навсегда ...

Итак, вам нужно использовать две задачи (в одной очереди): одну задачу для каждого получателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...