2017-08-29 15 views
0

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で失敗タスクを実行するにはどうすればよいですか?

答えて

0

ここでは二つの問題があります:あなたは(queue割り当て)name_on_server_Aために定義された正しいキューにタスクの

  1. ルート - 私のために新しいです道の何かであります(私は右のキューに名によってセロリの設定とルート内の各タスクをルータを使用してい

  2. をあなたがセロリのアプリを定義するときにタスクfailureを含めるのを忘れかもしれないので、それは登録解除:。

    アプリ=セロリ(ブローカー= 'AMQP://'、バックエンド= '... ' [' file1.py'、 'file2.py'、..] =含む)に

関連する問題