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