2010-01-07 22 views
1

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

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

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

ответ

2

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

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

+0

спасибо steve..это попробуйте это – Aadith

+0

Я согласен с Стивом. Каждая задача в очереди задач может отправлять только одному получателю; в противном случае у вас будет такая же проблема, что и сейчас, но хуже. –

5

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

Две вещи, чтобы думать:

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

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

+0

спасибо adam да..и считал, что положено в ссылку .. не вариант, который я могу преследовать в данном конкретном случае. – Aadith

+0

Адам, еще один быстрый вопрос..отправить несколько писем подряд, не сталкиваясь с QuotaException, было бы хорошая идея сделать Thread.currentThread(). sleep (1 минута) после каждой почтовой передачи? – Aadith

+0

Aadith, вы не можете использовать какие-либо функции потоковой передачи в AppEngine; они не допускаются. Кроме того, вы столкнетесь с лимитом в 30 секунд за запрос. Правильный способ справиться с этим - настроить очередь задач только на обработку запроса один раз в минуту. Вы можете узнать больше о настройке очередей задач здесь: http://code.google.com/appengine/docs/python/config/queue.html –

Смежные вопросы