2012-09-07 46 views
19

到目前爲止,沒有人(甚至沒有GAE文檔)已經能夠給我的差爲隊列和隊列之間有什麼真正明確的說明。推VS在谷歌應用程序引擎拉入隊列

我的瞭解是Task Queue API允許您定義工作可以入隊的任務隊列。不知何故,這可以與GAE的自動縮放功能配合使用,因此您無需顯式管理從這些隊列中消耗任務的工作線程數量:GAE僅爲您提供幫助。

但我無處可以找到推拉隊列差異的「國王英語」描述。什麼是「推送隊列」推動?什麼是拉隊?拉?它們是否都配置在queues.xml之內?

回答

24

拉隊列您將任務排入隊列並且您的代碼需要拉他們,您通過從隊列中租用任務並刪除任務來拉他們。如果您不刪除這些任務並且租約時間已過期,系統會將這些任務返回到隊列中。

您可以使用拉隊列(例如)來聚合可以一起處理的多個工作單元。另一個例子:排隊任務將被外部機器(如EC2或gCompute)拉動以便以AppEngine無法處理的方式處理任務。

推送隊列您將任務排入隊列,但AppEngine會將他們移出隊列並在任務指定的處理程序中運行它們。您可以控制任務處理速率,如何控制任務執行失敗,並且AppEngine將決定使用多少個實例(線程)來處理處理。

+1

Ahhh謝謝@Shay Erlichmen(+1) - 所以總結一下:「pull」隊列需要你在你的代碼中明確手動出列和處理任務;而對於「推」隊列,你只需指定一個處理程序和一個配置,GAE負責其餘部分。這是一個公平的評估?另外,還有一些跟進:(1)'queues.xml'只適用於推隊列嗎? (2)我假設任務隊列API包含用於從拉隊列中顯式出隊/刪除任務的代碼,是的?再次感謝! – IAmYourFaja

+1

@pnongrata你的總結是正確的,至於(1)否,你還可以在queues.xml中定義拉隊列,至少如果隊列不在它不存在的xml中。和(2)是的,查找lease_queue(出隊)和delete_tasks。 –