基于外部事件(事件队列)从队列中消耗

时间:2013-05-03 21:40:16

标签: python erlang rabbitmq celery eventqueue

我遇到了一个用例,我想控制芹菜工人如何以及何时从Rabbitmq出发处理任务。出口将与芹菜环境中发生的外部事件同步,但我担心芹菜是否给我任何灵活性来控制任务的出列?我尝试调查,下面是一些可能性:

  • 使用basic.get代替basic.consume,其中基于外部事件触发basic.get。但是,我看到芹菜默认为basic.consume(推送)语义。如果不直接修改核心,我可以覆盖此行为吗?

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

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

2 个答案:

答案 0 :(得分:0)

使用远程控制命令,您可以从给定队列中pause or resume消息消费。

celery.control.cancel_consumer('celery')

上面的命令指示所有工作者停止从默认芹菜队列消耗(出列)消息

celery.control.add_consumer('celery')

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

答案 1 :(得分:0)

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