トピック交換を設定するために私の設定がどのようになっているのか混乱しています。セロリとRabbitMQを使ったトピック交換
http://www.rabbitmq.com/tutorials/tutorial-five-python.html
これは私が達成したいものです。その後、
Task1 -> send to QueueOne and QueueFirehose
Task2 -> sent to QueueTwo and QueueFirehose
:
Task1 -> consume from QueueOne
Task2 -> consume from QueueTwo
TaskFirehose -> consume from QueueFirehose
私は唯一のタスク1がQueueTwoから消費するQueueOneとTask2のから消費したいです。
この問題は、Task1と2が実行されると、QueueFirehoseも使い果たされ、TaskFirehoseタスクが決して実行されないということです。
私の設定に何か問題がありますか、何か誤解していますか?
Task1 -> send to QueueOne
Task2 -> sent to QueueTwo
TaskFirehose -> send to QueueFirehose
その後:
Worker1 -> consume from QueueOne, QueueFirehose
Worker2 -> consume from QueueTwo, QueueFirehose
WorkerFirehose -> consume from QueueFirehose
これは、あなたが何を意味するのか、正確ではないかもしれませんが、私はそれは多くのシナリオをカバーすべきだと思うと
CELERY_QUEUES = {
"QueueOne": {
"exchange_type": "topic",
"binding_key": "pipeline.one",
},
"QueueTwo": {
"exchange_type": "topic",
"binding_key": "pipeline.two",
},
"QueueFirehose": {
"exchange_type": "topic",
"binding_key": "pipeline.#",
},
}
CELERY_ROUTES = {
"tasks.task1": {
"queue": 'QueueOne',
"routing_key": 'pipeline.one',
},
"tasks.task2": {
"queue": 'QueueTwo',
"routing_key": 'pipeline.two',
},
"tasks.firehose": {
'queue': 'QueueFirehose',
"routing_key": 'pipeline.#',
},
}
これは説明のための用語に過ぎないかもしれませんが、あなたの説明は、あなたがタスクと労働者を融合させているように思えます。たとえば、「Task2がQueue2に送信されました」と後で「Queue2から消費するTask2」と言います。タスクは消費されません。彼らは(労働者によって)消費される。また、 "TaskFirehoseタスクは実行されません"と言っていますが、あなたの説明では、TaskFirehoseがキューに送られていません。基本的な考え方は次のとおりです。タスクはキューに送られます。作業者は割り当てられたキューからタスクを実行します。タスク!=それらを実行するワーカー。 –