2つの別々のサーバーに2つのアプリケーションがあり、AとBと呼ばせてください。両方のアプリケーションでCeleryワーカーがアクティブになり、キュー(QueueAとQueueB)を分離します。別のキュー/ワーカーでCeleryのlink_errorコールバックを実行する
サーバBは、apply_async
を使用してキューBにタスクをプッシュします。ここで
は、サーバ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で失敗タスクを実行するにはどうすればよいですか?