Как очереди задач Java App Engine могут использоваться для массового планирования для пользователей? - PullRequest
0 голосов
/ 23 сентября 2011

Я сосредоточен на GAE-J для разработки веб-приложения на Java.

У меня есть сценарий, в котором пользователь создаст свое расписание для набора напоминаний. И я должен отправлять электронные письма в эту конкретную дату / время.

Не могу создать тему на GAE. Итак, у меня есть решение Task Queues.

Так что я могу достичь этой функциональности с помощью очередей задач. Пользователь будет создавать задачи. И App Engine выполнит его в определенную дату и время.

Спасибо

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Хотя непосредственное использование очереди задач, как предполагает Крис, будет работать в течение более длительных периодов напоминания (например, более 30 дней) и в тех случаях, когда напоминание может быть изменено, более косвенный подход, вероятно, целесообразен.

Я бы порекомендовал хранить напоминания в хранилище данных, а затем использовать один из нескольких подходов, в зависимости от ваших требований:

  • Запускать обычное задание cron (скажем, ежечасно), которое выбирает списокнапоминаний, появляющихся в следующем интервале, и планирование задач очереди задач для каждого.
  • У вас есть отдельная задача, которую вы планируете запускать в момент, когда должно появиться следующее напоминание (общесистемное), которое отправляетнапоминание (я), а затем ставит в очередь новую задачу для следующего ожидаемого напоминания.
  • Запустите бэкэнд, как предлагает Крис, который регулярно сканирует хранилище данных на наличие предстоящих напоминаний.

Во всех вышеупомянутых случаях вам, вероятно, понадобится специальный код для случая, когда пользователь устанавливает напоминание менее чем за минимальный интервал опроса, который выЗадание - возможно, поставит задачу напрямую.Вы также можете рассмотреть возможность пакетной отправки напоминаний, чтобы минимизировать количество задач и время, затрачиваемое на стене.

0 голосов
/ 23 сентября 2011

Вы можете сделать это с помощью очередей задач - в основном, когда вы получаете запрос «напомнить мне в дату / время X, отправив электронное письмо», вы создаете новую задачу со следующей базовой структурой:

if current time is close to or past the given date/time X:
  send the email
else
  fail this task

Если время напоминания далеко в будущем, первые несколько раз задание запланировано, оно не будет выполнено и будет запланировано на более позднее время.Недостатком этого подхода является то, что он не гарантирует, что задание будет выполнено именно тогда, когда должно быть отправлено напоминание - это может занять некоторое время до или после.Вы можете уменьшить это окно, учитывая, что ваша задача может выполняться в течение 10 минут, поэтому, если вы находитесь в течение 10 минут с момента напоминания, спите до нужного времени, а затем отправьте электронное письмо.

Если напоминания должны быть отправлены как можно ближе ко времени, просто используйте Backend - сохраняйте экземпляр работающим вечно и отправляйте ему все напоминания, и он может непрерывно просматривать все напоминания, которые он долженотправить и отправить их точно в нужное время.

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