【问题标题】:I need a django-celery daemon to listen to specific rabbitmq channel我需要一个 django-celery 守护进程来收听特定的 rabbitmq 频道
【发布时间】:2013-11-27 16:21:13
【问题描述】:

事实上,我很少有带有 celery 任务的 django 应用程序。我需要在特定通道内执行每个任务,以便我可以控制负载。例如,我可能有 3 个服务器监听 channel_for_app_1,两个监听 channel_for_app_2。我的问题是如何运行 celery 守护进程并指定频道?还有其他方法吗?

【问题讨论】:

  • 如果您列出与 ...please insert code here 一起工作的最少代码,您可能会得到更多响应,但您不知道如何执行此操作?
  • 我并没有真正遇到代码问题。我可以将任务发布到特定的频道,甚至可以使用TaskConsumer 来消费。但是我怎么能用 django-celery 来代替呢?

标签: python django rabbitmq celery django-celery


【解决方案1】:

请查看此页面:http://docs.celeryproject.org/en/latest/userguide/routing.html

你的 celery 应该以 -Q 开头,--queue 设置,它定义了哪个队列将用于获取任务

【讨论】:

    【解决方案2】:

    在您的 django 设置中,您可以指定 CELERY_QUEUES:

    CELERY_QUEUES = {
    "worker": {
        "exchange": "worker",
        "binding_key": "worker" 
    },
    

    像这样。每个键都是一个队列名称,如果你想变得花哨(多个交换等),你可以更改交换和绑定键,但我从来不需要。

    当你定义一个任务时,你可以

    @task(queue="worker", etc)

    最后一步是在运行 celery 时指定队列名称 - 通过 celery 守护进程配置,或在运行时在命令行中指定。所有这一切的结果是 celery 任务将进入任务定义指定的队列,并且仅在运行指定队列的盒子上。

    所以我不确定当你说“通道”时你的意思是否明显不同,但我一直使用多个每个任务队列来完全按照你的描述进行操作。

    【讨论】:

      猜你喜欢
      • 2018-06-11
      • 2014-11-24
      • 2017-06-11
      • 2016-10-07
      • 2021-09-29
      • 2016-02-07
      • 2014-07-03
      • 2018-11-03
      • 2014-09-01
      相关资源
      最近更新 更多