2015-09-23 3 views
1

Перед добавлением задачи в очередь вытягивания, я должен подтвердить, существует ли одна и та же задача уже в очереди, если существует необходимость пропускать добавление задачи в очередь. Добавление задачи с именем не работает для меня, так как оно не истекает до тех пор, пока семь дней из очереди не будут удалены.Как определить, существует ли задача уже в очереди GAE pull?

Мы можем перечислить задачи, используя REST API. Точно так же мы можем получить список задач в модуле GAE или есть ли другой способ определить, существует ли задача в очереди в модуле Google App Engine?

Благодаря

+0

Я не совсем понимаю (вы не объяснили это), почему вы не можете просто использовать имена и REST API ...? – Nick

+0

Hi Nick, согласно моему требованию, такие же задачи, как уведомления, появляются в течение периода (например, 5 минут). Поэтому, чтобы избежать дублирования уведомлений, необходимо отправить способ First First Service для этой продолжительности (т. Е. В течение этих 5 минут). Таким образом, уникальные задачи должны выполняться в течение этой продолжительности. –

+0

Можете ли вы более подробно объяснить, что вы подразумеваете под '' Добавление задачи с именем не работает для меня, поскольку оно не истекает, пока семь дней из очереди даже не удалятся? – Nick

ответ

2

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

Это будет стоить вам 1 читать & 4 написать (2 для вставки & 2 для удаления) операций на каждую задачу - ничто не освобождается.

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

Предположим, у вас есть сущность Пользователь и свойство TaskCounter.

Затем нужно добавить задачу:

tasks.add (TASKNAME = "TASKNAME" ул (user.id +) + ул (user.TaskCounter)) - что бы застраховать вы можете иметь только 1 активная задача на объект. Конечно, вам нужно будет обновить свойство, когда задача завершится. Если вы все равно обновляете объект в задаче, вам почти ничего не стоит.

+0

Спасибо Александру за ваш ответ. Я думал об использовании Memcache вместо db раньше, так как он содержит время истечения срока для объекта. –

+0

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

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