我被困住了。
我在不同的位置有2个VPS(一个EU,一个NA)。我有时需要在欧盟服务器上执行我的Celery任务,有时需要在NA服务器上执行(因为网站根据位置显示不同的信息)。
因此,在我的Flask应用程序中,我创建了两个执行相同操作的不同任务:
@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)
从管理面板执行操作时会调用这些任务。根据用户选择的内容,我希望在服务器EU或服务器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)}
在EU 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
现在,当我进入管理面板,并从下拉列表中选择EU时启动项目 - >没问题。任务根据需要启动。但是,当我选择NA时,收到以下错误消息:
Received and deleted unknown message. Wrong destination?!?
然后我收到了消息的全部内容,这是非常神秘的,但它基本上包含了我的论点。我不知道如何调试它,为什么它适用于EU而不是NA。
几天来一直坚持这一点,SO的解决方案没有帮助。请帮忙!
答案 0 :(得分:-2)
删除命令中的
celery -A myapp.celery worker -Q EU --loglevel=INFO --concurrency=6
选项。即。
变化:
celery -A myapp.celery worker EU --loglevel=INFO --concurrency=6
要
mouse is over