2012-07-27 64 views
1

最近我一直注意到,當我重新安排延期任務時,任務會產生兩個或兩個以上完全相同的任務。我剛剛完成了一項工作,生成了4個相同的任務。我們使用如下代碼重新安排任務:谷歌App Engine添加延遲任務隊列產生多個任務

Queue q = null; 
if (queueName == null) 
    q = QueueFactory.getDefaultQueue(); 
else 
    q = QueueFactory.getQueue(queueName); 

TaskOptions to = TaskOptions.Builder.withPayload(this); 
q.add(to); 

這段代碼很簡單,但它造成了很多的我們的應用程序的問題。我們甚至試圖給任務一個名字,例如:

to.taskName(TASK_NAME); 

防止重複的任務從產卵沒有用。有沒有其他人看到這個問題或有一個解決方案,以防止重複。

+1

爲什麼重新安排延期任務?如果您在任務處理程序中這樣做,則可以創建多個任務,因爲可以多次運行同一個任務。 – mjibson 2012-07-27 20:57:46

+0

爲什麼你會爲什麼我重新安排一個例子。假設我正在處理用戶的任務文檔。該任務正在Frontend實例上運行,因此我必須遵守10分鐘計時器。爲了保持當前任務的狀態,我需要重新安排該任務,以便在接近時間限制時完成其工作。 – ndixon 2012-07-28 23:17:11

回答

0

任務隊列可以多次執行相同的任務。這是預期的行爲。

您的任務必須是冪等的,才能使用任務隊列。即如果它多次運行,它必須像運行一次那樣運行。否則,您不能使用任務隊列。