Celery (RabbitMQ を使用) にロガーがあり、緊急の場合にその作業を複製したいと考えています。
# tasks.py
@task
def log(message):
with open('test.txt', 'a') as f:
f.write(message)
# views.py
log.delay(message)
Celery がlog()
呼び出されたときに、別のマシンで 2 つのインスタンスを実行するにはどうすればよいですか?
これを行うことはまったく意味がありますか?
これは RabbitMQ で可能です。トピックベースの exchangeを使用している場合、1 つのメッセージを 2 つの異なるキューに入れ、2 つの受信者に個別に配信できることは明らかです。
sender =>
[message, routing_key=event.logging.log] => [queue A, topic=event.#]
=> receiver 1
=> [queue B, topic=*.logging.*]
=> receiver 2
メッセージは両方のキューに送信され、別のキューからメッセージを盗むことはありません。