0

我遇到了一个用例,我想控制芹菜工人如何以及何时将任务从rabbitmq中取出来进行处理。出队将与 celery 上下文之外发生的外部事件同步,但我担心的是 celery 是否给我任何灵活性来控制任务的出队?我试图调查,以下是一些可能性:

  • 使用basic.get代替basic.consumebasic.get根据外部事件触发。但是,我看到 celery 默认为basic.consume(推送)语义。我可以在不直接修改核心的情况下覆盖此行为吗?

  • 在触发外部事件时自定义远程控制工作人员。但是,从文档中我不太清楚远程控制命令如何帮助我控制任务的出队。

我非常倾向于继续使用 celery,并且可能避免在 AMQP 之上编写自定义队列处理解决方案。

4

2 回答 2

0

还有两个需要考虑的奇异选项:(1) 在 Rabbit 层中定义自定义交换类型。这允许您创建控制哪些任务发送到哪些队列的路由规则。(2) 定义一个自定义的 Celery 中介。这允许您控制哪些任务从队列移动到工作池。

于 2013-08-26T19:02:01.267 回答
0

使用远程控制命令,您可以暂停或恢复给定队列的消息消费。

celery.control.cancel_consumer('celery')

上面的命令指示所有工作人员停止使用默认 celery 队列中的消息(出队)

celery.control.add_consumer('celery')

远程命令接受允许向特定工作人员发送请求的目标参数

于 2013-05-04T13:26:10.133 回答