我必須在AppEngine上的多租戶環境中實施重複執行的任務。真正的用例是「實施循環發票」。管理多租戶應用程序中的任務隊列 - GAE
我在懷疑3種方法,從集中管理到每個命名空間分散到每個計劃任務的分散。尋求反饋。
集中管理:有一個「主要任務隊列」或cron作業定期檢查其命名空間作業必須被執行,然後踢他們。每個名稱空間查找要完成的任務。
每個命名空間分散:有定期檢查它屬於需要做什麼樣的命名空間的任務或每個命名空間cron作業。
每個任務分散處理:當在命名空間中創建新作業時,立即爲該任務在將來期望的點處安排任務隊列。沒有「管理」任務隊列。
我冒充自己的問題在每一種方法:
集中管理:魂鬥羅 - >不結垢,它需要迭代在所有 '客戶' 的命名空間。 PRO - >更易於管理/控制正在發生的事情。
分散給每個名字空間:兩全其美?
分散每個任務:專業 - >規模好,沒有管理開銷; CONTRA - >什麼時候版本升級,如果有一個錯誤和安排沒有正常工作,你必須糾正......聽起來像一場噩夢。如果安排失敗會怎樣?我可以擁有100%的玩家嗎?一年後計劃完成的任務能夠完成嗎?
有沒有人有很好的建議/經驗?
thx ...我認爲第三種方法也不好。 – koma
小後續問題:我不能通過名稱空間進行事務處理,對嗎?因此,在全局名稱空間中標記記錄並保存記錄記錄不能在事務中完成! – koma
看看這段代碼:https://developers.google。com/appengine/docs/java/multitenancy/multitenancy#Java_Using_namespaces_with_the_Datastore可以使用類似的方法:更新所選命名空間中的實體,並創建一個任務來更新全局名稱空間。如果此過程失敗,請向管理員發送消息。它可能永遠不會發生,但以防萬一。 –