2017-02-13 43 views
5

我具有以下設置:芹菜中的預取任務是否被確認?

  • RabbitMQ的經紀人+ Django的
  • 西芹CELERYD_PREFETCH_MULTIPLIER = 32(我有很多小的任務 的因而預取它們使得從性能的角度來看有很大的意義)
  • CELERY_ACKS_LATE =假(任務不是冪等的)

我在docker容器中運行芹菜,所以當我重建docker芹菜時,工作人員並沒有正常關閉。這是可以的,如果沒有確認任務,因爲一旦工人再次進入新的碼頭集裝箱,經紀人將把他們發回,但在其他情況下,他們 - 將會丟失。

在花管理面板預取任務有狀態收到。

我仔細閱讀過官方文檔和related question,直覺上我覺得我的設置中的預取任務已被確認。是這樣嗎?

回答

2

隨着CELERY_ACKS_LATE=False一旦工人開始執行它,任務將被確認:just before execution

所以,如果一個工人開始執行任務,你殺了它,任務將會丟失。其他預取任務不會丟失,因爲他們仍然未被確認。

+0

這聽起來很合理,但花中的預取任務被標記爲「已接收」 - 這是否意味着他們還沒有開始執行? –

+0

我猜'收到'表示Rabbitmq方面的'Unacked'。其他工人不能預取他們,因爲他們不是'準備好'。但是,如果工人失去聯繫而不承認,他們會變成「準備好」。 – Raz

+0

但是,如果我將重新啓動芹菜服務器(硬重啓),rabbitmq將如何知道這些任務能夠分配給其他節點? –