RabbitMQ上解决Celery任务优先级的方法?

9
我正在使用RabbitMQ作为队列,通过Celery处理一些数据处理任务。我会在用户首次注册时启动celery任务,并定期更新其数据。但是,我希望当在线的用户运行任务时,能够给予这些任务优先级。我注意到Celery中有一个任务优先级设置,但似乎RabbitMQ不支持此功能。这个线程http://groups.google.com/group/celery-users/browse_thread/thread/ac3b6123d63421e5/b7740def1389e87e?lnk=gst&q=priority#b7740def1389e87e建议使用两个不同的队列,一个高优先级队列和一个低优先级队列,或者为低优先级任务设置速率限制。
请问是否有好的解决方案来实现优先级?谢谢!

请查看这个问题和答案。 - tsveti_iko
2个回答

5

2
除此之外,您可以将紧急任务推送到某个队列(假设为urgent-queue),并设置消费者优先级,即让所有消费者以高优先级从urgent-queue中获取任务。

https://github.com/celery/celery/issues/3098

在消费者端,您可以在队列中定义x-priority参数以进行消费。在下面的示例中,消费者从优先级为0的celery队列和优先级为10的hipri队列中获取任务。
示例:
CELERY_QUEUES = (
    Queue('celery', Exchange('celery', type='direct'), routing_key='celery',
          consumer_arguments={'x-priority': 0}),
    Queue('hipri', Exchange('hipri', type='direct'), routing_key='hipri',
          consumer_arguments={'x-priority': 10}),
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接