使用动态路由密钥启动worker?

2024-09-26 22:55:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有多种任务类型的队列,我需要为特定任务运行worker。 比如说“芹菜”之类的任务类型1--app=应用程序'

队列配置:

CELERY_QUEUES = (
    Queue('myqueue',    routing_key='task.#'),
)
CELERY_DEFAULT_EXCHANGE_TYPE = 'topic'

使用鼠兔任务很容易解决:http://www.rabbitmq.com/tutorials/tutorial-five-python.html但是如何用芹菜来做呢?在


Tags: keyapp应用程序default类型taskexchange队列
1条回答
网友
1楼 · 发布于 2024-09-26 22:55:38

Np,您不能将worker绑定到路由密钥。在

  • 工作线程使用队列而不是路由密钥。在
  • 生产者使用路由密钥发送消息,rabbitmq路由到队列。在

皮卡也不可能。在

在本教程中,工作者/使用者将自己的队列绑定到路由键。在

  1. 生产者发出路由键为'info'的日志
  2. RabbitMQ将丢弃所有这些参数,直到队列绑定到此路由密钥为止
  3. 接收方创建队列a并将其绑定到路由密钥“info”
  4. 现在rabbitmq将带有路由密钥'info'的日志路由到队列A,然后接收方使用它们

你可以很容易地用芹菜复制这种结合。在

例如,您可以在celery配置文件中执行此操作:

 exchange = Exchange('default', type=topic)
 CELERY_QUEUES = (
   Queue('all_logs', exchange, routing_key='logs.#'),
   Queue('info_logs', exchange, routing_key='logs.info')
  )

接收所有日志:

^{pr2}$

只接收“信息”日志(带有路由密钥的消息=日志.info仅限)

$ celery worker -A receive_logs -Q info_logs

最后,您已经启动了一个只使用带有特定路由密钥的消息的worker,这正是您想要的。在

注意:两个文件中的信息日志都是重复的队列:所有日志以及队列:信息日志在

您可能会对以下内容感兴趣: http://docs.celeryproject.org/en/latest/configuration.html?highlight=direct#std:setting-CELERY_WORKER_DIRECT

相关问题 更多 >

    热门问题