2017-02-02 5 views
0

Я застрял.Сельдерей получил и удалил неизвестное сообщение. Неправильное место назначения?!? - 2 сервера, подключенные к одному брокеру

У меня есть 2 VPS в разных местах (один EU, один NA). Мне иногда требуется, чтобы моя задача Celery выполнялась на сервере ЕС, а иногда и на сервере NA (потому что на веб-сайте отображается различная информация, основанная на местоположении).

Итак, в моем Колба приложение, которое я создал две различные задачи, которые делают то же самое:

@celery.task(bind=True, name='task_EU') 
def task_EU(self, arg1, arg2, arg3, arg4): 
    with app.app_context():         
     cust_module.handle(arg1, arg2, arg3, arg4) 

@celery.task(bind=True, name='task_NA') 
def task_NA(self, arg1, arg2, arg3, arg4): 
    with app.app_context(): 
     cust_module.handle(arg1, arg2, arg3, arg4) 

Эти задачи называются, когда действие выполняется из панели администратора. В зависимости от того, что есть выбрать пользователь, я хочу, задача будет выполняться на сервере ЕС или сервер NA, так что я сделал это:

@app.route('/launch-new-project', methods=['POST']) 
def launch_new_project(): 

    arg1 = request.form['arg1'] 
    arg2 = request.form['arg2'] 
    arg3 = request.form['arg3'] 
    arg4 = request.form['arg4'] # EU or NA 

    # launch celery task 
    if arg4 == 'NA': # user selected 'NA' from drop-down menu 
     task = task_NA.apply_async((arg1, arg2, arg3, arg4), queue='NA') 
    else: 
     task = task_EU.apply_async((arg1, arg2, arg3, arg4), queue='EU') 

    return task.id, 202, {'location': url_for('taskstatus', task_id=task.id)} 

На VPS ЕС, я запущу очередь так:

celery -A myapp.celery worker -Q EU --loglevel=INFO --concurrency=6 

Мой брокер (я использую redis) работает на одном и том же VPS, поэтому нет проблем с подключением к нему.

Команда NA VPS - то же самое, также подключается к брокеру, который находится на EU VPS.

celery -A myapp.celery worker -Q NA --loglevel=INFO --concurrency=6 

Теперь, когда я иду к панели администратора, и запустить проект при выборе ЕС из выпадающего списка -> нет проблем. Задача запускается по мере необходимости. Когда я выбираю NA, однако, я получаю следующее сообщение об ошибке:

Received and deleted unknown message. Wrong destination?!? 

Я тогда получить полное содержание сообщения, которое является весьма загадочным, но он в основном содержит мои аргументы. Я понятия не имею, как отлаживать это, почему он работает на ЕС, а не на НС.

Застрял на этом в течение многих дней, решения на SO не помогли. Пожалуйста помоги!

ответ

0

Удалите опцию -Q в вашей команде. т.е.

Изменение: celery -A myapp.celery worker -Q EU --loglevel=INFO --concurrency=6

в celery -A myapp.celery worker EU --loglevel=INFO --concurrency=6