我在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上执行,其中第一个任务是从哪里调用的?