2016-08-18 110 views
2

我有一個Django項目,我用rabbitmq芹菜執行一組異步。任務。所以我計劃的設置就是這樣。Django和芹菜在不同的服務器和芹菜能夠發送回調到Django一旦任務完成

  1. Django應用程序運行在一臺服務器上。
  2. 芹菜工人和rabbitmq從另一臺服務器上運行。

我最初的問題是,如何訪問休息在另一臺服務器上的芹菜任務的django模型?

並假設我無法訪問Django模型,有沒有辦法一旦任務完成,我可以發送回調到Django應用程序傳遞值,以便我得到更新Django的數據庫基於值通過了?

回答

3

關於你的第一個問題,從工人的服務器訪問Django模型:

你的Django應用程序必須是可用兩種服務器A(服務用戶)和服務器B上(託管芹菜工人)

關於你的第二個問題,根據值更新數據庫。你的意思是異步任務的結果?如果是這樣,那麼你有兩種選擇:

  • 假設你有權訪問數據庫,你可以保存任何你需要從任務本身保存的任何東西。
  • 你可以使用一個結果後端(其中之一是通過Django的ORM)爲約Keeping Results
+0

你對我的第二個問題的第二個解決方案,沒有使用結果後端,並從任務中獲取返回的結果使整個過程同步一個,有沒有辦法做異步? – DeadDjangoDjoker

0

我用下面的設置上我的應用程序芹菜的官方文檔中提到:

  1. 任務從Django啓動 - 信息從模型實例中提取並作爲字典傳遞給任務。 NB - 這將是更有前途的證明,因爲Celery 4將默認使用JSON編碼
  2. 遠程服務器運行任務並創建結果字典
  3. 遠程服務器然後調用Django上的工作人員僅監聽的更新任務服務器。
  4. Django工作人員閱讀結果字典和更新模型。

Django工作人員監聽一個單獨的隊列,這不是嚴格必要的。結果後端不使用 - 數據需要剛剛傳遞給任務