2017-09-01 98 views
0

我有一個隊列定義如下:爲什麼隊列上的GAE任務運行得比指定的更頻繁?

.... 
<queue> 
    <name>sendMailsBatch</name> 
    <rate>1/m</rate> 
    <max-concurrent-requests>1</max-concurrent-requests> 
    <retry-parameters> 
     <min-backoff-seconds>70</min-backoff-seconds> 
     <max-doublings>1</max-doublings> 
    </retry-parameters> 
</queue> 
.... 

我希望這是每一個任務運行時間之間的至少60秒的時間間隔。無論是因爲失敗而運行的任務是相同的任務,還是運行不同的任務,都必須如此。

該過程從一個任務放入隊列開始,如果所有數據存儲操作都成功完成,則此任務將結束 - 向隊列中添加另一個任務(因爲它使用由數據存儲操作執行的遊標任務)。

當我在日誌看起來雖然,任務往往執行: enter image description here

爲什麼在任務執行此頻繁,當我已經配置了最多一個任務可以同時運行,並在每分鐘最多一項任務,如果一項任務失敗,運行之間至少應該有70秒?

感謝, -Louise

回答

1

當處理隊列中,應用程序引擎使用的所有規定來處理的是已經在其桶的併發請求。一旦完成這些任務,它將不會執行任何額外的工作,直到新的任務出現在存儲桶中。這些任務添加到存儲桶的速率由<rate>定義。

對於您的情況,您正確設置了<rate>,但由於您未明確設置<bucket-size>參數,因此默認爲5,如此處所述:https://cloud.google.com/appengine/docs/standard/java/config/queueref。一旦明確將<bucket-size>設置爲1,則不應再遇到此問題。

+0

太棒了,它的工作原理!非常感謝你。 我認爲儘管參數最大併發請求是相當誤導。它實際上意味着最大併發請求每桶? – Lull

+0

我相信這是可以在特定隊列的任何給定時間處理的最大請求數。如果您已將最大併發請求數設置爲2,並且您的sendMailsBatch存儲桶中有2個任務,則App Engine可能會啓動兩個處理程序來完成這些任務。 – dwelling

相關問題