我在2個獨立的服務器上有2個應用程序,我們稱它們爲A和B.這兩個應用程序都有一個Celery工作程序處於活動狀態,監聽單獨的隊列(QueueA和QueueB)。在單獨的隊列/工作者上執行芹菜的link_error回調
服務器B使用apply_async
將任務推送到QueueB。
這裏是服務器B的任務:
@app.task(bind=True, queue="QueueB", name="name_on_server_A")
def taskForServerB():
# nothing is executed here
@app.task(bind=True)
def success(result):
print('Task succeeded')
@app.task(bind=True):
def failure(...):
print('task failed')
taskForServerB.s().apply_async(link=success.s(), link_error=failure.s())
在服務器A上,任務name_on_server_A
接收任務並執行它。如果成功完成,則任務success
在ServerB上正確執行,但其name_on_server_A
失敗,則不會執行任務failure
。相反,服務器A爲名稱爲failure
的任務引發NotRegisteredError
。
有什麼我失蹤?我怎樣才能讓失敗任務在ServerB上執行,其中第一個任務是從哪裏調用的?