【问题标题】:Workaround for celery task priority on RabbitMQ?RabbitMQ 上 celery 任务优先级的解决方法?
【发布时间】:2011-03-23 16:50:01
【问题描述】:

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

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

【问题讨论】:

    标签: rabbitmq celery


    【解决方案1】:

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

    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}),
    )
    

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 2012-06-22
      • 2018-06-10
      • 2013-03-26
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      相关资源
      最近更新 更多