关于RabbitMQ的芹菜任务优先级的解决方法?

时间:2010-07-31 18:29:21

标签: rabbitmq celery

我在RabbitMQ上运行带有Celery的Django作为处理一些数据处理任务的队列。当用户第一次注册时,我正在开始芹菜任务,并定期更新他们的数据。但是,我当然要优先考虑运行当前在线用户的任务。我注意到芹菜中的任务有一个优先级设置,但似乎rabbitmq不支持这个。此线程 http://groups.google.com/group/celery-users/browse_thread/thread/ac3b6123d63421e5/b7740def1389e87e?lnk=gst&q=priority#b7740def1389e87e建议具有两个不同的队列,一个是高优先级队列,另一个是低优先级队列,或者为较低优先级任务设置速率限制。

有没有人有一个好的解决方法来实现优先级?提前谢谢!

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:2)

除此之外,您可以将紧急任务推送到某个队列(让我们说紧急队列)并设置消费者优先级,即让所有消费者从具有高优先级的紧急队列中获取任务。

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

在消费者端,您可以在要使用的队列中定义x-priority参数。在下面的示例中,消费者从优先级为0的芹菜队列和优先级为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}),
)