繁体   English   中英

芹菜apply_async choking rabbit mq

[英]celery apply_async choking rabbit mq

我正在使用celery的apply_async方法来排队任务。 我希望每天运行大约100,000个这样的任务(数量只会增加)。 我使用RabbitMQ作为经纪人。 几天前我运行了代码,RabbitMQ在几个小时后崩溃了。 我注意到apply_async为每个任务创建一个新队列,x-expires设置为1天。 我的假设是,当创建了如此多的队列时,RabbitMQ会窒息。 如何阻止芹菜为每项任务创建额外的队列?

我还尝试将queue参数提供给apply_async,并为该队列分配了一个x-message-ttl。 消息确实进入了这个新的队列,然而它们立即被消耗,并且从未达到我放置的30秒的ttl。 这并没有阻止芹菜创造这些额外的队列。

这是我的代码:

views.py

   from celery import task, chain

    chain(task1.s(a), task2.s(b),)
         .apply_async(link_error=error_handler.s(a), queue="async_tasks_queue")

tasks.py

from celery.result import AsyncResult

@shared_task
def error_handler(uuid, a):
    #Handle error

@shared_task
def task1(a):
    #Do something
    return a

@shared_task
def task2(a, b):
    #Do something more

celery.py

app = Celery(
    'app',
    broker=settings.QUEUE_URL,
    backend=settings.QUEUE_URL,
)

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


app.amqp.queues.add("async_tasks_queue", queue_arguments={'durable' : True , 'x-message-ttl': 30000})

从芹菜日志:

[2016-01-05 01:17:24,398:INFO / MainProcess]收到的任务:project.tasks.task1 [615e094c-2ec9-4568-9fe1-82ead2cd303b]

[2016-01-05 01:17:24,834:INFO / MainProcess]收到的任务:project.decorators.wrapper [bf9a0a94-8e71-4ad6-9eaa-359f93446a3f]

当执行这些任务时,RabbitMQ有两个名为“615e094c2ec945689fe182ead2cd303b”和“bf9a0a948e714ad69eaa359f93446a3f”的新队列我的代码在Django 1.7.7,芹菜3.1.17和RabbitMQ 3.5.3上运行。

任何其他异步执行任务的建议也是受欢迎的

尝试使用不同的后端 - 我推荐Redis。 当我们尝试使用Rabbitmq作为代理和后端时,我们发现它不适合代理角色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM