【发布时间】:2012-07-02 11:11:57
【问题描述】:
我在 Celery 中有一个记录器(使用 RabbitMQ),并希望在紧急情况下复制它的工作。
# tasks.py
@task
def log(message):
with open('test.txt', 'a') as f:
f.write(message)
# views.py
log.delay(message)
如何让不同机器上的 2 个 Celery 实例在调用时运行 log()?
这样做有意义吗?
这在 RabbitMQ 中是可能的。如果您有topic-based exchange,则很明显可以将一条消息放入两个不同的队列并独立地传递给 2 个接收者。
sender =>
[message, routing_key=event.logging.log] => [queue A, topic=event.#]
=> receiver 1
=> [queue B, topic=*.logging.*]
=> receiver 2
消息将被发送到两个队列,它们都不会从另一个队列中窃取消息。
【问题讨论】: