芹菜与rabbitmq一起创建多个队列

芹菜与rabbitmq一起创建多个队列,rabbitmq,celery,django-celery,Rabbitmq,Celery,Django Celery,我已经用兔子装了芹菜。 问题是,对于返回的每个结果,Celery将在兔子中创建一个队列,并在exchange celeryresults中使用任务的ID 我仍然希望有结果,但是在一个队列上 我的芹菜: from datetime import timedelta OKER_URL = 'amqp://' CELERY_RESULT_BACKEND = 'amqp' #CELERY_IGNORE_RESULT = True CELERY_TASK_SERIALIZER = 'json' CELER

我已经用兔子装了芹菜。 问题是,对于返回的每个结果,Celery将在兔子中创建一个队列,并在exchange celeryresults中使用任务的ID

我仍然希望有结果,但是在一个队列上

我的芹菜:

from datetime import timedelta
OKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp'
#CELERY_IGNORE_RESULT = True
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT=['json', 'application/json']
CELERY_TIMEZONE = 'Europe/Oslo'
CELERY_ENABLE_UTC = True

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    'every-minute': {
        'task': 'tasks.remote',
        'schedule': timedelta(seconds=30),
        'args': (),
    },
}
可能吗?怎么做


谢谢

amqp后端为每个任务创建一个新队列。或者,还有一个新的rpc后端,它将结果保存在单个队列中


您说希望芹菜将结果保留在一个队列中。现在,为了回答你的问题,让我问你一个问题:

您如何期望每个生产者在不阅读队列中的每一条消息以找到其需要/想要的消息的情况下检查其相关结果

本质上,您需要的是一个键值对数据库,以便查找为O(1)。使用队列代理实现这一点的唯一方法是为每个“对”创建一个队列

我知道拥有许多GUID队列并不整洁,但从概念上讲,这是在消息代理上实现这一点的唯一方法。

没有什么不寻常的

当我们使用amqp作为结果后端时,芹菜就是这样工作的。它将为与工作人员使用的每个任务对应的每个结果创建一个新的临时队列

如果您对结果不感兴趣,可以尝试芹菜\u忽略\u结果=真设置


如果您确实希望存储结果,那么我建议使用不同的结果后端,如Redis。

此解决方案不会将所有结果保留在一个队列中,但它至少会在处理完额外的队列后立即清理这些队列


如果使用Redis作为后端,则在处理完创建错误队列的结果后,运行result.forget()。这将导致结果和结果队列消失。这可以帮助您管理队列的数量,并防止OOM问题。

如果没有看到您的代码,很难猜测。。。芹菜配置以及如何创建队列、发送任务等。此队列有多临时?我刚刚检查了一下,我有超过10000个队列,超过25000条消息。我认为默认情况下是24小时……您可以通过设置芹菜任务结果过期=来尝试。让我知道它是如何工作的?虽然有10000个队列和25000条消息,但它看起来像一个大型应用程序。请考虑其他后端。我还先尝试了rabbitmq结果后端,然后由于这些原因,切换到了redis。我是否需要为Rabbit配置任何特殊的内容以侦听RPC?不,不需要配置Rabbit。将
cellery\u RESULT\u BACKEND='rpc://'
添加到您的
cellery\u config.py
中,您应该没事了。