我在芹菜(與RabbitMQ)中有一個記錄器,並且想要複製緊急情況下的工作。如何複製Django芹菜工人?
# tasks.py
@task
def log(message):
with open('test.txt', 'a') as f:
f.write(message)
# views.py
log.delay(message)
如何在不同的機器上運行log()
調用Celery的2個實例?
這樣做有意義嗎?
這是RabbitMQ中可能的。如果你有一個topic-based exchange,很明顯,一條消息可以放入兩個不同的隊列,並獨立傳送給2個接收器。
sender =>
[message, routing_key=event.logging.log] => [queue A, topic=event.#]
=> receiver 1
=> [queue B, topic=*.logging.*]
=> receiver 2
消息將被髮送到兩個隊列,並且他們都不會從另一個隊列竊取消息。
我會在RabbitMQ上添加註釋。 –
我的觀點是,如果在同等配置的節點之間進行簡單的負載平衡,則無法選擇哪個節點將執行任務。至少這是通常的故障轉移行爲。如果您將任務限制在特定節點上運行 - 那麼您將自動失去故障切換,並且綁定到選定節點。如果他們都死了..你仍然有運行節點,但不會使用它們。或者簡單地說 - 如果它會失敗 - 你將很難達到啓動2個同步任務的靈活性。你會採用更安全的方法 - 即使用on_retry()函數來處理重試。 – Tisho
對,這很有道理。 –