2013-06-25 52 views
2

進行一些長期任務時,我需要確保排隊的任務按接收順序執行。我在第一次測試中發現,當我達到最大工人數(CELERYD_CONCURRENCY)時,發送的以下任務將排隊,然後第一個要執行的任務實際上是最新的一個。Celery - RabbitMQ - 執行訂單

當然,相反的行爲就是我之後的事情,即最老的消息是有空閒的工人時第一個被執行的消息。

這種行爲的解釋是什麼?如何改變?

回答

3

原來這是Rabbitmq設置prefetchCount的結果,prefetchCount預取每個通道的一組消息。

由於我對長時間運行的任務使用隊列,因此我通過將CELERYD_PREFETCH_MULTIPLIER設置爲1(缺省值爲4)來解決此問題,以便僅預留一個消息,從而保留執行順序。