簡體   English   中英

如何禁用 celery(使用 redis)中的任務重新交付?

[英]How can I disable redelivery of tasks in celery (with redis)?

我是否可以配置 celery 以在工作人員非正常關閉的情況下放棄任務? 對我來說更重要的是任務不重復而不是總是交付。

文檔中所述:

如果在 Visibility Timeout 內未確認任務,則該任務將重新交付給另一個工作人員並執行。

這會導致執行時間超過可見性超時的 ETA/倒計時/重試任務出現問題; 事實上,如果發生這種情況,它將再次執行,並在循環中再次執行。

因此,您必須增加可見性超時以匹配您計划使用的最長 ETA 的時間。

我的用例是我使用 1 天的visibility_timeout ,但在某些情況下這還不夠——我想在未來進一步安排任務。 “電源故障”或任何其他導致非正常關機的事件非常罕見,我可以接受任務被丟棄的情況,例如 0.01% 的情況。 此外,比預期晚 1 天執行的任務與根本沒有運行的任務一樣糟糕。

一種明顯的、hacky 的方法是將visibility_timeout設置為 100 年。 有沒有更好的辦法?

有一個acks_late配置,但默認值為false (因此請確保您沒有啟用它):

如果工作人員(由於某種原因)在執行過程中崩潰,您需要再次執行任務時,將使用 acks_late 設置。 重要的是要注意,不知道工作人員會崩潰,如果發生崩潰,通常是需要人工干預的不可恢復的錯誤(工作人員或任務代碼中的錯誤)。

(從這里引用)

task_acks_late的定義(好像名字在上個版本中改了一些不匹配)可以在這里找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM