Я хочу поместить задачи в очередь push-уведомлений в своем Java-приложении GAE, чтобы проверять статус моих пользователей, по 1 пользователю на задачу. Я изо всех сил пытаюсь найти хорошее решение для отслеживания и консолидации результатов аудита безопасным и эффективным способом по каждой из задач.
В настоящее время я использую отложенную задачу, которая имеет один параметр в своем конструкторе: строковое представление ключа объекта, представляющего пользователя, которого я пытаюсь проверить.
Типы данных, которые мне нужно хранить для каждого пользователя, - это да/нет, например, активны ли они, отменены/не отозваны ли их подключения к другим службам и т. д. Когда я объединяюсь, все, что я хочу сделать, это добавить все да и нет для каждого вопроса, так что, например. У меня 1000 активных пользователей и 200 неактивных пользователей и т.д.
Подходы, которые я рассматривал (извините за наивность...):
- Each task puts its own entity, which I then check afterwards to consolidate the results of all the tasks
- Pros: thread safe and safe in a distributed environment
- Минусы: относительно дорого (т. е. потому что мне нужно написать много строк, а затем удалить их) и неудобство, потому что мне нужно постобработать сущность, чтобы объединить данные из каждой из строк.
- I could grab an instance of some singleton class within each deferred task, and use that to hold and consolidate the data, and then cause it to persist its data later
- Pros: cheap (don't have to write/delete extra data), tidy because the single object does all the pieces of work, can be made thread safe
- Минусы: в GAE я не могу (легко?) полагаться на то, что синглтон действительно является синглтоном, потому что он распределен, поэтому на практике я могу получить данные, объединенные в два или более похожих «одиночных» объекта.
- I suspect I could write the data into some predefined context object (the servlet context?), or memcache?
- Pros: cheap, fast, potentially simple?
- Минусы: данные memcache могут быть переопределены — это небезопасно; не уверен в контексте сервлета
Суть в том, что все это мои выдуманные подходы, и я уверен, что должен быть стандартный подход/шаблон для выполнения такого рода вещей... но я не смог его найти.
Любые советы, пожалуйста...? Спасибо!