使用rabbitmq作为芹菜后端进行正确配置
我正在用芹菜构建一个flask应用程序,使用rabbitmq作为芹菜的后端 我对芹菜的看法是使用rabbitmq作为芹菜后端进行正确配置,rabbitmq,celery,pika,Rabbitmq,Celery,Pika,我正在用芹菜构建一个flask应用程序,使用rabbitmq作为芹菜的后端 我对芹菜的看法是 CELERY_BROKER_URL='amqp://localhost:5672', CELERY_RESULT_BACKEND='amqp://', CELERY_QUEUE_HA_POLICY='all', CELERY_TASK_RESULT_EXPIRES=None 然后,声明队列会产生一大堆错误 connection = pika.BlockingConnection(pika.Connec
CELERY_BROKER_URL='amqp://localhost:5672',
CELERY_RESULT_BACKEND='amqp://',
CELERY_QUEUE_HA_POLICY='all',
CELERY_TASK_RESULT_EXPIRES=None
然后,声明队列会产生一大堆错误
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue=new_task_id)
错误
好的,我把它改为channel.queue\u declare(queue=new\u task\u id,durable=True)
再一次,错误
PreconditionFailed: Queue.declare: (406) PRECONDITION_FAILED - inequivalent arg
'auto_delete' for queue '1419350288' in vhost '/':
received 'true' but current is 'false'
好的,我把它改为channel.queue\u declare(queue=new\u task\u id,durable=True,auto\u delete=True)
这次错误消失了
但是在我犯这些错误之前我怎么知道呢?我在上搜索了芹菜的文档,详细的文档,但没有得到我需要的——它只是列出了所有的conf项,但没有告诉我如何设置它。或者是rabbitmq的文件我应该参考一下
谢谢大家!
编辑
So,在配置文件或任何已注册任务中声明的所有队列。
你能再解释一下吗?declare
和create
之间有什么区别芹菜的默认行为是创建所有缺少的队列(请参阅。任务队列默认情况下将使用“持久”标志创建。如果
芹菜\u任务\u结果\u过期
参数不是无(默认情况下,它设置为1天),则结果队列将使用“持久”、“自动删除”标志和“x-expires”创建
因此,在您的配置文件或任何已注册任务中声明的所有队列。此外,当您使用amqp result backend时,如果您没有设置CELERY\u IGNORE\u result
参数,则将在初始化tash时创建结果队列,并将其命名为任务id
因此,如果您试图用冲突的配置重新声明此队列,RabbitMQ将拒绝它。因此,您不必创建它
编辑
CELERY\u create\u MISSING\u QUEUES
设置为True,则初始化时,CELERY\u QUEUES
或CELERY\u DEFAULT\u Queue
参数中列出的任何队列,或注册ta中声明的任何自定义队列sks选项,例如@task(name=“custom”,queue=“my_custom_queue”)
,或者甚至在自定义芹菜路由定义中,都将提交给RabbitMQ,因此,如果它们不存在,将创建它们
Cellery\u ignore\u RESULT
或任务自定义选项),将检查名为任务标识符的队列是否存在,如果不存在,将使用默认结果配置创建它(请参阅)谢谢你的回答!我想你几乎解决了我的问题。请看我的编辑。
PreconditionFailed: Queue.declare: (406) PRECONDITION_FAILED - inequivalent arg
'auto_delete' for queue '1419350288' in vhost '/':
received 'true' but current is 'false'