2012-11-01 39 views
1

我目前正在使用Redis進行其中的幾個步驟的工作流程。對於每個步驟,工作人員從隊列中取出有效載荷,並在完成後將其推送到下一個隊列,在那裏下一個工作人員可以進一步進行處理。如果發生異常,則該任務由工作人員放入特殊隊列中。如何在Celery中創建具有錯誤處理的順序工作流程?

關於通過應用程序的流程的應用程序邏輯因此在於工作人員本身。我現在想切換到芹菜。

我明白,在芹菜你可以使用子任務,但我沒有看到你如何表達你的具體錯誤處理在那裏的不同情況,如異常和超時。您是否應該使用不同的隊列或使用子任務,以及代碼中的代碼如何?

回答

1

我現在已經閱讀文檔更徹底,還做了一些測試,這個工程:

的問題是串起來的任務,讓他們在其他以後發生的,但在同一時間能處理錯誤情況和「爆發」流量並做其他事情,而不僅僅是中止。

您可以將任務與鏈接串起來,如果有一個額外的參數* link_error *,那麼它將用於失敗。從閱讀:

http://docs.celeryproject.org/en/latest/userguide/calling.html#linking-callbacks-errbacks 我做了這個:

res = add.apply_async((2, 2), link=mul.s(16), link_error=onerror.s()) 

三項任務是添加,MUL和onerror的。添加兩個數字,乘以兩個數字。因此,這會將2和2加在一起,然後總和將轉移到下一步(mul)並乘以16. 但是,如果添加的代碼有問題,或者數據不正確,或者其他情況不好但可檢測到發生時,添加引發異常,並且將運行onerror任務而不是mul。 onerror任務獲取作業的uuid,並可以在數據庫後端查看作業,如果配置了這樣的作業。 onerror任務可以將作業歸檔或發送電子郵件或其他內容。

相關問題