Как предотвратить гонки в Google App Engine с помощью Java? - PullRequest
1 голос
/ 20 сентября 2010

Я не знаю, является ли слово "раса" лучшим словом, но я не нашел лучшего слова.

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

Ответы [ 4 ]

4 голосов
/ 20 сентября 2010

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

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

2 голосов
/ 20 сентября 2010

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

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

0 голосов
/ 20 сентября 2010

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

Типы вещей, которые ваша Task может моделировать;

  • ID
  • имя
  • описание
  • статус (не назначен, назначен, завершен и т. Д.)
  • пользователь (идентификатор пользователя, которому назначено это задание)
  • серьезность (приятно иметь)
0 голосов
/ 20 сентября 2010

Самый простой способ, который приходит мне в голову, - это создать примерно 5-минутный период блокировки перед отправкой другого электронного письма и уведомить администратора о том, что что-то подобное только что произошло, поэтому он может отменить отправку своей собственной.

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